genBornMat() is a general routine for
solving the forward problem. Based on the Method argument,
the geometry in the Medium
structure, and the contents of the measurement
list, genBornMat() figures out what the appropriate
low-level routine to call is and makes the appropriate call for the
user.
Flags to indicate optical perturbations (see below)
Outputs:
Phi0
The fluence in a homogeneous medium
A
The forward matrix
Detailed Descriptions
The muVec argument is a two-parameter vector. The first
element (muVec(1)) indicates whether A should
include terms for calculating absorption perturbations, the second
term muVec(2) is for scattering perturbations. If the
flag is non-zero, the forward matrix includes those elements,
otherwise they are not calculated. Either muVec(1),
muVec(2) (or both) should be non-zero.
The forward matrix has a block form. To save space, a sparse
matrix representation is used for all but the simplest instances of
the forward matrix A. The outermost block is the type of
perturbation (if both are used); absorption first, then scattering.
Within that block, the next set of blocks are by wavelength (so that
the matrix will work correctly with perturbations at multiple
wavelengths). Space is left for all the wavelengths in SD,
regardless of whether those wavelengths appear in the measurement
list. Finally, within each wavelength is a dense matrix mapping
perturbations at that wavelength into the "scattered" field.
genBornMat() is mostly just a wrapper function that
calls the appropriate low-level routines based on the contents of the
measurement list and the Method argument. For
frequency-domain imagers, the conversion from the "Born" to "Rytov"
formulation is also handled by genBornMat().