Solving electrostatics problems with scuff-static

scuff-static is a tool within the scuff-em code suite for solving a broad class of electrostatics problems.

The various calculations that scuff-static may be divided into two categories: (1) calculations that yield the response of the geometry to one or more specific excitation stimuli ("type-1" calculations), and (2) calculations that yield intrinsic properties of the material geometry, independent of any external excitation ("type-2" calculations).

Type-1 calculations

For type-1 calculations, you pass command-line options to scuff-static that specify a specific electrostatic "excitation." A single excitation consists of one or both of the following:

  • a set of electrostatic potential values at which to maintain the conductors in the geometry (option --potfile); conductors for which no value is specified are maintained at 0V by default.

  • a description of an external electrostatic field, which may be a superposition of

    • the field of one or point charges (--monopole),
    • the field of one or point dipoles (--dipole),
    • a spatially-constant electrostatic field (--ConstField)
    • an spatially-varying electrostatic potential defined by a user-specified functional form (--PhiExt).

You may also use the --ExcitationFile option to specify a list of excitations, each consisting of one or both of the above ingredients. This is equivalent to running scuff-static multiple times with options specifying a single excitation (--potfile, --monopole, etc.) each time---but is much faster, because of the structure of BEM solvers: once we have done the set-up work needed to solve for one excitation (namely, forming and factorizing the BEM matrix), solving for any number of additional excitations is essentially "free" computationally.

Having specified one or more excitations for a type-1 calculation, you may request multiple types of output, which will be computed separately for each excitation:

  • Values of the electrostatic potential and electric field components at arbitrary user-specified Evaluation Points inside or outside material bodies, output in the form of numerical data in a text file (option --EPFile)

  • Field visualization files plotting the potential and fields on one or more arbitrary user-specified Field-Visualization mesh(es) (option --FVMesh), with the field-visualization mesh(es) optionally subject to one or more geometric transformations (option --FVMeshTransFile)

  • Surface-charge visualization files showing the distribution of electrostatic surface charges induced by the excitation (option --PlotFile)

Type-2 calculations

In contrast to type-1 calculations, type-2 calculations do not involve any user-specified excitation. The available type-2 calculations are:

  • Computation of the capacitance matrix for the conductors in the geometry (option --capfile)

  • Computation of the DC polarizabilities of the bodies (both conductors and dielectrics) in the geometry (option --polfile)

  • Computation of the C-matrix, a sort of electrostatic version of the "T-matrix" used to characterize the scattering properties of bodies at nonzero frequencies (options --CMatrixFile and/or --CMatrixHDF5File). The C-matrix was shown in this paper to be related to quantum-mechanical entanglement entropy.

Geometrical transformations

For both type-1 and type-2 calculations, you may use the optional --transfile option to specify a list of geometric transformations to be applied to the scattering geometry; you will then get back results for each specified output quantity under each transformation.

Implicit dielectric substrates

You may use the optional --substrate option to specify that your geometry exists in the presence of a substrate consisting of one or more (infinite-area) stacked dielectric layers with an optional ground plane. This substrate will be treated implicitly by scuff-static; your .scuffgeo file and the .msh files it specifies need only define the (finite-area) conducting and/or dielectric objects that lie above (or within the substrate.

Under the hood: Implementation of scuff-static

As a technical detail, we note that the implementation of scuff-static actually differs in some significant ways from the other codes in the scuff-em suite; in particular, as compared to the scuff-em core library, scuff-static uses different basis functions and a different formulation of the boundary-element method, as appropriate for zero-frequency problems. (More specifically, scuff-static expands surface electric charge densities on PEC and dielectric surfaces using ``pulse'' basis functions, which are constant on individual triangles and vanishing everywhere else.) However, from the implementation standpoint, it turns out that the calculations needed to implement the electrostatics calculations in scuff-static are a proper subset of the calculations already implemented in scuff-em. Moreover, from the user's standpoint, the work needed to set up a scuff-static problem (create surface meshes, write geometry files, etc.) is similar to the setup needed for the nonzero-frequency codes in the scuff-em suite. This is why it makes sense to package these codes together.

Here is a brief technical memo discussing the implementation of scuff-static, including both the underlying BEM electrostatics formulation and the execution of the various types of calculation (capacitance, polarizability, etc.) that the code can do.

1. scuff-static command-line options

Options defining the geometry

--geometry    MyGeometry.scuffgeo
--substrate   MySubstrate.substrate
--TransFile   Transformations.trans

The mandatory --geometry option specifies a scuff-em geometry file defining one or more surface meshes that comprise your geometry.

The optional --substrate option specifies an file describing a substrate consisting of zero or more dielectric layers stacked atop an optional ground plane; see here for an example.

The optional --TransFile option specifies a list of geometric transformations to be applied to your geometry; each output calculation you request will be repeated once for each geometric transformation.

Options defining individual excitations for type-1 calculations

To run a "type-1" calculation with just a single excitation, you may specify any combination of the following options.

--PotFile    MyPotFile
--ConstField Ex Ey Ez
--Monopole   x y z Q
--Dipole     x y z Px Py Pz
--PhiExt     PhiExpression(x,y,z)

Here MyPotFile should be a simple text file consisting of a list of (surface label, potential value) pairs, where the surface label is the label assigned to a surface in the .scuffgeo file. For example, if your geometry contains conductors labeled UpperSurface and LowerSurface, which you wish to maintain at 1.2 volts and -3.4 volts respectively, then MyPotFile would look like this:

 UpperSurface  1.2
 LowerSurface -3.4

Any conductors that are not specified in the --PotFile are maintained at 0 volts by default.

--ConstField Ex Ey Ez specifies a spatially-constant external electrostatic field with components E=(Ex,Ey,Ez).

--Monopole x y z Q specifies a point charge of strength Q at cartesian coordinates (x,y,z).

--Dipole x y z px py pz specifies a point dipole at cartesian coordinates (x,y,z) with dipole moment p=(px,py,pz).

--PhiExt MyPhiExpression(x,y,z) specifies a spatially-varying electrostatic potential defined by the given function of cartesian coordinates x, y, z. Example: --PhiExt cos(3*x)*cosh(3*y)

Options defining multiple excitations for type-1 calculations

 --ExcitationFile MyExcitationFile

Specifies that MyExcitationFile contains a list of excitations. The file should consist of one or more clauses of the form EXCITATION Label ... ENDEXCITATION where Label is an arbitrary label you assign to the excitation (which will be used to tag the corresponding output data). Each clause should contain one or more lines, each defining either (a) a {ConductorLabel, PhiValue} pair, or (b) an external-field specification. (Note that all external-field specifications defined within a single EXCITATION clause are present simultaneously when that excitation is active.)

Here's an example of an excitation file for a geometry containing conductors labeled UpperSurface and LowerSurface:

   UpperSurface   1

   LowerSurface  -1

   UpperSurface   1
   LowerSurface  -1

 EXCITATION BothWithMonopoles
   UpperSurface   1
   LowerSurface  -1
   Monopole       0 0 +1 1
   Monopole       0 0 -1 1

   CONSTFIELD     1.0 0.0 0.0

   CONSTFIELD     0.0  1.0 0.0
   DIPOLE         -0.1 0.2 0.3 0.4 -0.5 0.2

Options defining outputs for type-1 calculation

--EPFile     MyEPFile

Requests that the electrostatic potential and field components be computed at each evaluation point listed in the file MyEPFile, which is a simple text file containing three numbers per line (the coordinates of a single evaluation point.) The resulting output file will contain a header explaining how to interpret its contents.

--FVMesh          MyFVMesh.msh
--FVMeshTransFile MyFVMeshTransFile

Requests that electrostatic fields be computed on a Field-Visualization mesh described by the gmsh mesh file MyFVMesh.msh. This will produce in an output file with extension .pp that can be opened directly in gmsh to visualize the fields in any region of space.

The optional FVMeshTransFile defines a list of geometric transformations to be applied to MyFVMesh.msh. This allows you to obtain visualization data on a large region foliated by multiple translated or rotated copies of a single mesh screen.

--PlotFile   MyPlotFile.pp

Requests creation of a gmsh visualization file named MyPlotFile.pp plotting the induced charge density on all conducting and dielectric surfaces in the geometry.

Options requesting outputs for type-2 calculations

--CapFile    MyCapacitanceMatrix.dat

If you specify a file name using --CapFile, scuff-static will compute the full capacitance matrix for your geometry and write the data to the specified file. (The file will be overwritten if it already exists.)

--PolFile    MyPolFile.dat

If you specify a file name using --PolFile, scuff-static will compute the DC polarizability of each object in your geometry and write the data to the specified file. (The file will be overwritten if it already exists.)

2. Examples of calculations using scuff-static