kirchhoffSurfaceIntegral
Works with VSimEM license.
Performs a near to far field transformation of the electric field at a specified time and on a specified sphere.
fields (string vector, required)
The fields used in the transformation. The ordering E, dEdx, dEdy, dEdz, dEdt is assumed.
lightSpeed (float, optional)
Speed of light in medium.
dtFar (float, optional)
Time seperation of far field time points.
numSurfacePoint (non-negative integer, optional)
Number of integration points around Kirchhoff circle.
timeInterval (float vector, required)
Time interval over which to compute far field.
position (float vector, optional)
Position of far field point.
centerSphere (float vector, required)
Center of Kirchhoff sphere.
radiusSphere (float, required)
Radius of Kirchhoff sphere.
haveNormalDeriv (0 or 1, optional)
Set to read normal derivatives of fields on Kirchhoff sphere.
radiusFarSphere (float, optional)
Radius of far sphere.
numTheta (non-negative integer, optional)
Number of polar angles on the far sphere.
numPhi (non-negative integer, optional)
Number of azimuthal angles on the far sphere.
# Far field parameters
# Radius of the Kirchhoff sphere
$ RS = 1.0
# Distance of far field from center of sphere
$ DFF = 10.0
# Far field time interval
$ TFFMIN = (DFF + RS) / LIGHTSPEED
$ TFFMAX = TFFMIN + 1.0 / FREQ_ANT
$ NTFAR = 10
$ DTFAR = (TFFMAX - TFFMIN) / NTFAR
# Number of integration points around
# a circular slice of the Kirchhoff sphere
$ NS = 10
<History farField>
kind = kirchhoffSurfaceIntegral
# The ordering E, dEdx, dEdy, dEdz and dEdt is assumed by kirchhoffSurfaceIntegral
fields = [emField.centerE emField.dEdx emField.dEdy emField.dEdz emField.dEdt]
radiusFarSphere = DFF
numTheta = 9
numPhi = 18
dtFar = DTFAR
# For a single far field time at TFFMIN, we use a timeInterval of length 0
timeInterval = [TFFMIN TFFMIN]
# The Kirchhoff sphere must be contained entirely within the computational domain
centerSphere = [0.0 0.0 0.0]
radiusSphere = RS
numSurfacePoint = NS
</History>
The hdf5 datset of the kirchhoff surface integral is structured as follows. The rows represent each timestep of the simulation.
The columns go in order of numPhi and then numTheta at TFFMIN. Then numPhi and numTheta at TFFMAX. If NTFAR is greater than 1, there will be more sets of phi/theta points in between TFFMIN and TFFMAX. This yields a total number of columns of (numPhi+numTheta)*(NTFAR+1). The number of integration points (NS) is used in the calculation of the values of the history, but do not impact it’s size.
See also add-far-field-history-macro to implement a kirchhoffSurfaceIntegral history using macros.