Conductor Block¶
Conductor:
This block describes the shape of an electric conductor (i.e., an equipotential object) via a <ConductorShape> block, and describes as well the properties of that conductor (i.e., its voltage or charge). This block is used inside a cutCellPoisson Updater;
There are currently two kinds of Conductors:
setVoltage
andfloating
. Thekind=setVoltage
conductor allows the conductor’s voltage to be set as a function of time. Thekind=floating
conductor allows the charge on the conductor to be set, and the voltage is subsequently determined by the charge.
Conductor parameters
¶
- <ConductorShape shape> a code block named 'shape'
This ConductorShape Block describes the shape/geometry of the metal-filled region.
- calculateCharge (optional boolean, default false)
This option is irrevocably true for floating conductors. For setVoltage conductors, this determines whether the field-induced charge (integral of epsilon E.dA) should be calculated if possible. It may be useful to calculate the charge, e.g., to determine the current that needs to be supplied to the conductor to keep it at its set voltage.
- fillVoltageInMetal (optional string, default: throughoutMetal)
If ‘throughoutMetal’, then the voltage will be set throughout the metal region of the conductor; this is typically what is desired, because the conductor should be at a constant potential throughout – in addition, it ensures that the gradient of the electric potential (i.e., the electric field) vanishes inside the conductor. if ‘onBoundaryNodes’ then the voltage will be set only on the metal boundary nodes (the minimum set of nodes necessary to specify the Dirichlet boundary conditions) – this is mainly useful simply to see where the boundary nodes are. If ‘onCutCellNodes’ the voltage will be set on the nodes of any cells that are cut by the boundary (including the boundary nodes).
- initialCharge (optional float, default 0.)
The initial charge on the conductor (in Coulombs) at t=0. This is usually relevant only for floating conductors.
- restartCharge (optional float, default: restore the value
- from the MultiField dump file if present, or default to the initialCharge
- if not present)
If this option is specified, it will override any value restored from the MultiField dump file; at restart time, the charge on the conductor will be set to this value. Typically this option is used only when restarting from a dump file that doesn’t have this information.
This is usually meaningful only for floating conductors.
Parameters for Conductor kind = setVoltage
¶
- <Expression voltage> a required UserFunc Expression block
This expression block describes the conductor’s electrostatic potential (in Volts), as a function of time t in seconds (i.e., the expression can be written in terms of t).
Note that the use of local UserFunc blocks within the <Expression> can allow very powerful expressions. For example, one could use a local historyFunc to set the voltage based on the value of an arbitrary Tensor<History>.
Parameters for Conductor kind = floating
¶
- <Expression current>, an optional UserFunc Expression block
This expression block describes the electric current (in Amperes) that flows into or is absorbed by the conductor.
This works with a VSimPD license.
For example, to simulate a proton beam hitting the conductor (without actually simulating the protons) the current should be set to a positive value.
The expression can be a function of time t.
The expression can also be a function of the voltages of all the <Conductor>s in the same cutCellPoissonUpdater (including this Conductor’s own voltage). The variable for the voltage of <Conductor someName> is “V_someName”.
Caution: Currents between floating conductors must be symmetric! For example, if there are two floating conductors, C1 and C2, and C1 is given a current V_C2/R, then C2 must also be given a current V_C1/R (among other possible currents). Typically the current to C1 will be (V_C2-V_C1)/R + other currents depending on V_C1, while the current to C2 will be (V_C1-V_C2)/R + other currents depending on V_C2. This symmetry does not apply to currents that depend on Conductors of
kind=setVoltage
– those conductors can supply or absorb arbitrary currents self-consistently. If an asymmetric current is specified, a warning will be issued, and the current will be forcibly symmetrized (which may not be the intent).This is used to simulate currents in addition to currents from particles obtained from ptclAbsorbers and ptclSources.
Note that the use of local UserFunc blocks within the <Expression> can allow very powerful expressions. For example, one could use a local historyFunc to set the current based on the value of some Tensor<History>.
- ptclAbsorbers (optional list of strings)
A list of <ParticleSink>s; the charge from particles that get “sunk” by these <ParticleSink>s will be added to the conductor. Typically this list will include all the particle absorbers that correspond to the conductor shape (i.e., that absorbe particles when they hit the metal conductor). Note that absorber names must often be qualified by the species: e.g., electrons.sphereAbsorber.
- ptclSources (optional list of strings)
A list of <ParticleSource>s; the charge from particles that are “emitted” from these <ParticleSource>s will be subtracted from conductor. Typically this list will include all the <ParticleSource>s that correspond to the conductor shape (i.e., that emit particles from the metal conductor, such as field emitters or secondary emitters). Note that source names must often be qualified by the species: e.g., electrons.secondaryElectronEmitter.
- ptclSourceSpecies (optional list of strings of the
- same length as ptclSources)
Some <ParticleSource>s can emit multiple species. This is a list of species, one for element of ptclSources, describing which species to count.
Conductor
Examples¶
# This Conductor has a set voltage outside a sphere.
# N.B.: it is best not to give the Conductor the same
# name as the gridBoundary -- it tends to make it confusing
# to look up the object "sphere" if both the <GridBoundary>
# and the <ConductorShape> are named "sphere".
<Conductor sphereC>
kind = setVoltage
calculateCharge = true
<ConductorShape shape>
kind = gridBoundary
gridBoundary = sphere
</ConductorShape>
<Expression voltage>
expression = 12 * sin(100. * t) * exp(-t/0.1)
</Expression>
fillVoltageInMetal = throughoutMetal
</Conductor>
# This conductor floats at a potentially determined by the charged
# particles that it absorbs (and emits).
<Conductor smallSphereC>
kind = floating
ptclAbsorbers = [electrons.smallSphereAbsorber ions.smallSphereAbsorber]
ptclSources = [electrons.smallSphereSecondaryEmitter]
# No need to specify ptclSourceSpecies if the source emits only one species
#ptclSourceSpecies = [electrons]
<ConductorShape shape>
kind = gridBoundary
gridBoundary = smallSphere
</ConductorShape>
fillVoltageInMetal = throughoutMetal
</Conductor>
# This slab conductor has a set voltage of 0.
<Conductor groundC>
kind = setVoltage
calculateCharge = true
<ConductorShape shape>
kind = slab
cellsInBoundsAreMetal = true
lowerBounds = [0 0]
upperBounds = [10 1]
</ConductorShape>
<Expression voltage>
expression = "0."
</Expression>
</Conductor>
# This conductor floats at a potential determined by a set current that
# depends on the voltage difference between plate1C and plate2C.
<Conductor plate1C>
kind = floating
<ConductorShape shape>
kind = slab
cellsInBoundsAreMetal = true
lowerBounds = [0 7]
upperBounds = [10 8]
</ConductorShape>
<Expression current>
expression = (V_plate2C-V_plate1C)/R_12
# Since this contains a term V_plate2C/R_12, conductor plate2C
# must have a term V_plate1C/R_12.
</Expression>
</Conductor>
# This conductor floats at a potential determined by a set current that
# depends on the voltage difference between plate1C and plate2C,
# as well as the voltage difference between plate2C and groundC.
<Conductor plate2C>
kind = floating
<ConductorShape shape>
kind = slab
cellsInBoundsAreMetal = true
lowerBounds = [0 2]
upperBounds = [10 3]
</ConductorShape>
<Expression current>
expression = (V_groundC-V_plate2C)/R_G2+(V_plate1C-V_plate2C)/R_12
# Since this contains a term V_plate1C/R_12, conductor plate1C
# must have a term V_plate2C/R_12.
# However, groundC is not a floating conductor, so V_groundC can
# be used however desired.
</Expression>
</Conductor>