Closed odmiller closed 7 years ago
Am I correct that if I simply nullify the incident field, i.e. make the call
HMatrix *PFTMatrix = GetEMTPFTMatrix(this, Omega, 0, KN, DRMatrix, 0, Interior, Method);
then I will get the (negative of the) scattered-field component? So that if I then simply follow up withPFTMatrix->GetEntriesD(SurfaceIndex, ":", PFT);
the PFT matrix will contain the negative of the scattered-field components?
Yes, you got it, except here PFT
should be a double-valued array with room for 8 or more doubles (not an HMatrix
) whose entries will not be scattered field components but rather scattering contributions to absorbed power, scattered power, {x,y,z}-force, and {x,y,z}-torque, in that order. (The "scattering contribution to the absorbed power" is just the negative of the scattered power.) I think you are aware of all of these things, just restating them to be clear.
If you alternatively nullify the KN
argument while passing something nonzero for IF
you will get just the extinction.
(By the way, what does this function compute if one chooses Exterior instead of Interior?)
The Interior
argument to this function is a boolean flag that, if true
, uses the interior expansion for the surface fields instead of the exterior expansion. However, by default this flag is set to false
for all calculations in SCUFF-SCATTER and SCUFF-NEQ. So you should understand the Interior
argument to GetEMTPFTMatrix
to be always set to false.
There are two reasons to consider using the interior expansion.
The above advantages are in fact realized for (a) power computations in all cases, and (b) force/torque computations in lossless dielectrics. However, for force/torque computations in lossy dielectrics the interior expansions don't work. For this reason, I use the exterior expansion by default for all calculations in SCUFF-SCATTER and SCUFF-NEQ. Of course, if you are writing API codes you can certainly try running calculations with Interior=true
to see if this gives better results for your particular problem.
Very helpful, and informative! Thanks
Hi Homer,
It looks like in the "EMTPFT" approach you compute forces and torques by computing the "extinction" quantity and then subtracting the scattered-field component. What is the easiest way to actually get the scattered-field component (or of equal value the extinction component) by itself?
It looks like on lines 207-209 of GetPFT.cc you get the PFT Matrix and PFT values, with the key call being
HMatrix *PFTMatrix = GetEMTPFTMatrix(this, Omega, IF, KN, DRMatrix, 0, Interior, Method);
Am I correct that if I simply nullify the incident field, i.e. make the call
HMatrix *PFTMatrix = GetEMTPFTMatrix(this, Omega, 0, KN, DRMatrix, 0, Interior, Method);
then I will get the (negative of the) scattered-field component? So that if I then simply follow up withPFTMatrix->GetEntriesD(SurfaceIndex, ":", PFT);
thePFT
matrix will contain the negative of the scattered-field components?(By the way, what does this function compute if one chooses
Exterior
instead ofInterior
?)