conductorFunc
UserFuncs of kind = conductorFunc
return a result with information
about a Conductor Block in a cutCellPoisson updater,
namely the voltage on the conductor,
the total and absorbed charge on the conductor, or the capacitance of
the conductor (with respect to other conductors).
UserFuncs of kind = conductorFunc
take zero arguments.
conductor
The name of a Conductor Block to query for information. The name may need to be qualified, e.g., with the name of the MultiField and FieldUpdater containing the referenced conductor – e.g., myEsField.poissonUpdater.metalSphereC.
result (string, required)
Specifies what information the function should return;
depending on result
, different attributes may apply.
Following is a list of results and the extra attributes (if any) that pertain to each specific result. Each result is a scalar float.
voltage
result = voltage
returns the voltage of the conductor
(in Volts).
charge
result = charge
returns the total charge on the conductor
(in Coulombs).
To calculate this, calculateCharge
must be true
in the Conductor Block (this is automatically true for
floating conductors).
For floating conductors, this will be the absorbed charge (minus the emitted charge). For setVoltage conductors, this will be the induced charge, calculated from Gauss’s Law by integrating the electric field of the surface of the conductor.
absorbedCharge
result = absorbedCharge
returns the absorbed charge on the
conductor (in Coulombs).
To calculate this, calculateCharge
must be true
in the Conductor Block (this is automatically true for
floating conductors).
The absorbed charge is charge on the conductor resulting from
absorbed/emitted particles as well as specified currents
(cf. ptclAbsorbers
,
ptclSources
, and <Expression current>
in the Conductor Block). For floating conductors, the
absorbed charge will be (nearly) equal to the total charge.
For conductors with setVoltage, the absorbed charge will be zero.
capacitance
This result uses the following attribute:
otherConductor (string, optional, default: the same
as 'conductor')
which (like conductor
) specifies the name of a
Conductor Block.
result = capacitance
returns the capacitance of the conductor
with respect to another conductor (or itself). Unlike the other
results, this does not typically change in time over the course
of a simulation.
The capacitance of conductor C1 with respect to another conductor C2 is defined as the charge induced on C1 when 1V is placed on conductor C2 (while the voltage of all other conductors – including C1 if C1 and C2 are not the same – is maintained at zero). The units are C/V (or Farads).
Note: the otherConductor
must be in the same
cutCellPoisson block as the conductor
.
Note: either conductor
or otherConductor
(or both)
must be floating conductors (cf. Conductor Block) for the
capacitance to be calculated.
Note: if conductor
and otherConductor
are the same,
the capacitance is positive: 1 V on the conductor will generally
induced a positive charge on that conductor. However, if the
conductors are different, the resulting capacitance is
negative: putting 1 V on C2 while C1 remains at 0 V will generally
induce a negative charge on C1.
Note: the capacitance between two floating conductors
C1 and C2 is symmetric; swapping
conductor
and otherConductor
will yield the same
result.
In these examples, a conductorFunc
is used within a
functionOfTime TensorHistory to record charge, voltage, and
capacitance of a conductor. These assume that there is a
MultiField block ‘myEsField’ that contains a
cutCellPoisson updater block ‘poissonUpdater’ that
contains Conductor Block ‘sphereC’ and ‘plateC’, both of which are
floating conductors.
<History sphereVoltageAndCharge>
kind = functionOfTime
<Expression histCalc>
<UserFunc v>
kind = conductorFunc
conductor = myEsField.poissonUpdater.sphereC
result = voltage
</UserFunc>
<UserFunc q>
kind = conductorFunc
conductor = myEsField.poissonUpdater.sphereC
result = charge
</UserFunc>
expression = vector(v(), q())
</Expression>
</History>
<History sphereCapacitance>
kind = functionOfTime
<Expression histCalc>
<UserFunc c>
kind = conductorFunc
conductor = myEsField.poissonUpdater.sphereC
# otherConductor = sphereC # default
result = capacitance
</UserFunc>
expression = c()
</Expression>
applyPeriod = 0 # this doesn't change in time, so record just once
</History>
<History spherePlateCapacitance>
kind = functionOfTime
<Expression histCalc>
<UserFunc c>
kind = conductorFunc
conductor = myEsField.poissonUpdater.sphereC
otherConductor = plateC
result = capacitance
</UserFunc>
expression = abs(c()) # c() < 0; for convenience, we record abs(c()).
</Expression>
applyPeriod = 0 # this doesn't change in time, so record just once
</History>