S3P command syntax¶
Block-by-block description of the .s3p input file. Worked cases are in the S3P module guide.
Top-level blocks: ModelInfo, FiniteElement, FrequencyScan (or WaveguideFrequency), Port, Loading, LinearSolver, PostProcess.
ModelInfo¶
Identical in form to Omega3P's, including Material with EpsilonImag and MuImag, PML, and SurfaceMaterial. Boundary types available: Electric, Magnetic, Exterior, Impedance, Absorbing, Waveguide. Periodic boundaries are not available in S3P.
Two extensions to SurfaceMaterial matter in S3P:
SurfaceMaterial : {
ReferenceNumber: 3
Sigma: 5.8e7
Frequency: 5e9 // frequency at which Sigma applies
Coating : {
Type: ThinLossyDielectric
Epsilon: 56
Sigma: 12
Thickness: 1.e-3
}
}
Frequency fixes the frequency at which the surface impedance is evaluated for an Impedance boundary. Coating adds a thin lossy dielectric layer on the conductor without meshing it; see the T3P surface impedance tutorial for the physics.
FiniteElement¶
As in Omega3P: Order 1 to 6 and CurvedSurfaces.
FrequencyScan¶
Frequencies in Hz. If Interval exceeds End − Start, only Start is computed. For a single frequency the shorthand WaveguideFrequency: 1.3e+9 at top level is equivalent.
Port¶
One per Waveguide surface; absent, one mode is loaded. Load every mode that propagates anywhere in the scan range.
Loading¶
Dipole excitation as an alternative to port excitation, for mode identification:
Loading : {
Type: DipoleLoading
Coordinate: 0., 2., 0. // m
Direction: 0.0, 1.0, 0.0
Tolerance: 0.001
Power: 1. // dipole moment, A·m
Frequency: 30.e3 // Hz
}
Tolerance sets how closely the dipole direction must align with the nearest element edge.
LinearSolver¶
The default is the MUMPS direct solver. For large problems use an iterative solver with the multilevel preconditioner, which requires Order: 2:
LinearSolver : {
Solver: GMRES // MUMPS, GMRES, CG, QMR
Preconditioner: MP
MaxIterations: 5000
Tolerance: 1e-10
PrintFrequency: 50
QuietMode: 0 // 1 suppresses iteration output
}
MP first solves at order 1 with MUMPS to build a preconditioner, then iterates at order 2. The 2025 release notes give a resource table for this configuration on Perlmutter: 7 million elements on 4 nodes in 10 minutes, 47 million on 32 nodes in 2 hours.
PETSc solvers are also available with the same Solver: PETSc and PETScOption syntax as in Omega3P. Use -ksp_type cg only for lossless problems and -ksp_type gmres for lossy ones; complex problems need the bin-petsc-complex binaries.
PostProcess¶
PostProcess : {
Toggle: on
PortNumber: 7 // save fields only for this excitation port
ModeFile: rec // default s3p
WriteLoss: on
}
Without PortNumber, fields are written for every port excitation at every frequency, which multiplies the output. WriteLoss is read by the shared post-processor in emfem/src/NewPP.C and writes .loss surface power density files.
Output files¶
See the S3P module guide for Reflection.out, 2dports.log, and the per-mode port files. acdtool's rf post-processor reads S3P results with FreqScanID selecting the scan point; see the acdtool command syntax.