anchor.diff:          ! Read pre-computed three-component displacement Green's functions
           call read_fltinv_data_file(gf_disp,ierr)
           if (ierr.ne.0) then
  -            call usage('read_inputs: problem reading gf_disp file')
  +            call usage('read_inputs: problem reading gf_disp file (usage:none)')
           endif
   
           ! Verify that there are the correct number of rows in the array
           if (gf_disp%nrows .ne. 3*displacement%nrows) then
               call usage('read_inputs: number of lines in three-component displacement GF file '// &
  -                       'must be 3*ndisplacements (one line per displacement DOF)')
  +                       'must be 3*ndisplacements (one line per displacement DOF) (usage:none)')
           endif
       else
           ! Displacement Green's functions need to be calculated; allocate memory to array
  
positive.code: endif
  
  
  ! Rigid body rotations defined by Euler poles
  if (euler_file.ne.'none') then
      if (input_disp_unit.eq.'m') then
          call usage('read_inputs: disp units are m (displacement), incompatible with rotations')
      elseif (input_disp_unit.eq.'mm') then
          call usage('read_inputs: disp units are mm (displacement), incompatible with rotations')
      elseif (input_disp_unit.eq.'m/s') then
          ! Velocity: all good
      elseif (input_disp_unit.eq.'m/yr') then
          ! Velocity: all good
      elseif (input_disp_unit.eq.'mm/s') then
          ! Velocity: all good
      elseif (input_disp_unit.eq.'mm/yr') then
          ! Velocity: all good
      else
          call usage('read_inputs: no disp units named '//trim(input_disp_unit))
      endif
  
      ! Check that file exists, then open it
      if (.not.fileExists(euler_file)) then
          call usage('read_inputs: no Euler pole file named '//trim(euler_file))
      endif
      open(unit=68,file=euler_file,status='old')
  
      ! First line is the number of Euler poles
      read(68,*) npoles
      allocate(euler_pole(npoles,3))
  
      ! Initialize array recording which points are affected by each rigid body rotation
      if (displacement%file.ne.'none') then
          allocate(rigid_pt_array_disp(displacement%nrows))
          rigid_pt_array_disp = 0
      endif
      if (los%file.ne.'none') then
          allocate(rigid_pt_array_los(los%nrows))
          rigid_pt_array_los = 0
      endif
  
      ! Initialize array for prior constraints on Euler pole location
      if (inversion_mode.eq.'anneal'.or.inversion_mode.eq.'anneal-psc') then
          allocate(pole_array(npoles,4))
          pole_array = 0.0d0
      endif
  
      ! Read prior constraints on Euler pole locations
      do i = 1,npoles
          read(68,'(A)',end=4001,iostat=ios) line
          if (allocated(pole_array)) then
              read(line,*,end=4002,err=4002,iostat=ios) pole_array(i,1:4)
          endif
      enddo
      4001 if (ios.ne.0) then
          call usage('read_inputs: reached euler_file EOF before finished reading')
      endif
      4002 if (ios.ne.0) then
          write(stderr,*) 'read_inputs: error parsing Euler pole lon lat rad from: ',trim(line)
          call usage('Exiting')
      endif
  
      ! Read groups of points experiencing rigid rotations
      ! nrigid_dof = 0
      do
          read(68,'(A)',end=4003,iostat=ios) line
          read(line,*,end=4004,err=4004,iostat=ios) i,nchar,j
          if (nchar.eq.'3') then
              rigid_pt_array_disp(j) = i
              ! nrigid_dof = nrigid_dof + 3
          elseif (nchar.eq.'l'.or.nchar.eq.'L') then
              rigid_pt_array_los(j) = i
              ! nrigid_dof = nrigid_dof + 1
          else
              call usage('read_inputs: no observation type code named '//nchar//'; use "3" or "L"')
          endif
      enddo
      4003 ios = 0
      4004 if (ios.ne.0) then
          write(stderr,*) 'read_inputs: error parsing ipole 3|L iobs from: ',trim(line)
          call usage('exiting')
      endif
  
      ! Initialize Greens functions for rotations
      allocate(gf_euler(2*displacement%nrows+los%nrows,3*npoles))
      gf_euler = 0.0d0
  
      ! All done with rigid block file
      close(68)
  else
      npoles = 0
  endif
  
  
  ! Covariance of three-component and/or line-of-sight observations
  if (displacement%file.ne.'none'.or.los%file.ne.'none') then
  
  
negative.code:     if (ierr.ne.0) then
          write(stderr,*) 'read_inputs: problem reading slip constraint file'
          write(stderr,*) 'Format:'
          call usage(     '    slip_ss slip_ds (usage:fault)')
      endif
  
      ! There can be 1 value for all faults or 1 value for each fault
      if (slip_constraint%nrows.ne.1.and.slip_constraint%nrows.ne.fault%nrows) then
          call usage('read_inputs: number of slip constraints must be 1 or number of faults '// &
                     '(usage:none)')
      endif
  
      ! If there is only 1 value, set the full constraint array to that value
  