TEM3P command syntax¶
Block-by-block description of the .tem3p input file. Worked cases are in the TEM3P module guide.
Problem blocks: ThermostaticProblem, ElasticProblem, ThermoElasticProblem. Within a problem: MeshFile, BasisOrder, CurvedSurfaces, solver blocks, materials, Shell, HeatSource, Boundary, MeshDump, EigenSolver, HarmonicAnalysis, Transient.
Problem types¶
ThermostaticProblem : { ... } // steady-state thermal, linear or nonlinear
ElasticProblem : { ... } // static elasticity, eigenmodes, or harmonic response
ThermoElasticProblem : { RunId: 3 } // marker: run the following thermal then elastic
ThermostaticProblem : { ... } // problems in sequence, passing temperature
ElasticProblem : { ... }
Each problem block begins with the mesh:
Solvers¶
LinearSolver : {
Solver: CG // CG, GMRES, MUMPS
Verify: yes // compute the residual; default no
SaveDOFs: yes // keep DOFs for post-processing; default yes
Preconditioner: DIAGONAL // DIAGONAL, CHOLESKY, SSOR, ILU
AbsoluteTolerance: 1.0e-18
Tolerance: 1.0e-10
MaxIterations: 100000
}
PicardSolver : { ... same keys ... } // used for Picard steps in nonlinear solves
NonlinearSolver : {
Solver: Newton
PicardIteration: 10 // Picard steps before switching to Newton
MaxIterations: 40
AbsTolerance: 2.33e-10
RelTolerance: 1.0e-8
}
EigenSolver : { // in ElasticProblem: mechanical eigenmodes
NumEigenvalues: 5
FrequencyShift: 1.0 // Hz
}
HarmonicAnalysis : { // in ElasticProblem: forced response
Start: 50 // Hz, scan
End: 250
Interval: 50
Frequency: 50 // single frequency instead of a scan
StiffnessDamping: 0.01 // Rayleigh damping coefficients
MassDamping: 100000
}
Picard iteration first, then Newton, stabilizes nonlinear thermal solves. The eigensolver needs homogeneous boundary conditions and Density in the material. Harmonic analysis treats Neumann loads as amplitudes at each frequency; with damping the system is complex and the linear solver must handle it.
Note
AbsoluteTolerance inside LinearSolver is from the command reference. The example inputs spell it AbsoluteTolerante, and neither string is read by tem3p/src/LinearSolverMan.C, which reads Tolerance (default 1e-10). The only absolute tolerances the code reads are ThermalAbsoluteTolerance and ElasticAbsoluteTolerance in ThermoElasticProblem.
Materials¶
ThermalConductivity : { Id: 1 Value: 391 } // W/(m·K)
ThermalConductivity : { Id: 3 Function: functions/ss304 } // k(T) from a file
VolumeMaterial : {
Id: 1
ElasticLambda: 8.1244e+10 // Pa; or give
ElasticMu: 4.3363e+10 // Pa
// YoungsModulus: 17e6 // Pa, with
// PoissonsRatio: 0.36
ElasticAlpha: 1.70000e-5 // 1/K; not used by the eigensolver
Density: 8960 // kg/m³; eigensolver only
}
Id is the Cubit block. Either the Lamé pair or Young's modulus with Poisson's ratio may be given; the conversion is \(\mu = E/2(1+\sigma)\) and \(\lambda = E\sigma/(1+\sigma)(1-2\sigma)\).
Function files¶
A nonlinear property is a text file of piecewise expressions in T:
Used by ThermalConductivity.Function, Boundary.SurfaceResistance, Boundary.RobinFactor, and Boundary.RobinValue.
Shell¶
Shell : {
Bd: 6 // sideset carrying the shell
Material: 221 // a ThermalConductivity Id
BasisOrder: 1
Thickness: 1e-5 // m
}
ThermalConductivity : { Id: 221 Function: functions/CURRR100 }
A thin conducting layer on a surface, for platings and coatings, without meshing it. Material refers to a ThermalConductivity block, not a mesh block.
HeatSource¶
Volumetric heating, two kinds:
HeatSource : { // dielectric loss from an RF field
Id: 5 // block
ConditionType: RFHeating
WhichMode: 0
DielectricConstantE: 9
LossTangentE: 0.0001
Directory: s3p_results
Method: Powerinput
TargetPowerinput: 437.5 // W
}
HeatSource : { // external heating map, FLUKA format
Id: 9
ConditionType: ExtVHeating
ExtVHeatingFile: heating_file.dat
}
The FLUKA file has six header lines, then r1 r2 nr dr, theta1 theta2 ntheta dtheta, z1 z2 nz dz, a power scaling factor, a dummy line, and nr × ntheta × nz power densities with r varying fastest.
Thermal Boundary¶
Boundary : { Id: 2 ConditionType: Dirichlet DirichletValue: 2 } // K
Boundary : { Id: 4 ConditionType: Neumann NeumannValue: 0. } // W/m² into the surface
Boundary : {
Id: 5
ConditionType: Robin // convection
RobinConstantFactor: 20000.0 // h, W/(m²·K)
RobinConstantValue: 440000.0 // h × T_ambient
}
Boundary : {
Id: 5
ConditionType: Robin
RobinFactor: functions/He2p2f // nonlinear h(T)
RobinValue: functions/He2p2v
}
RFHeating¶
Heat flux from a field solution. Four ways to scale it:
| Key | Meaning |
|---|---|
WhichMode |
Mode index, from 0 |
Directory |
Field solver results |
Method |
Powerinput, Gradient, or PowerLoss |
TargetPowerinput, TargetGradient, TargetPowerloss |
The target in W, V/m, or W |
StartPoint, EndPoint |
Gradient integration line, m |
Sigma |
Conductivity for computing loss from the surface H, S/m |
SurfaceResistance |
Function file Rs(T) instead of Sigma |
DutyFactor |
Multiplies the load for pulsed operation |
SymmetryFactor |
Reference says 1 full, 0 half for heating; 0 full, 1 half, 2 quarter for detuning. Inconsistent in the reference document. EMHeating.C reads it with default 0 and a warning when absent; check tem3p.out for the value applied. |
Mechanical Boundary¶
Boundary : { Id: 1 ConditionType: Dirichlet DirichletValue: 0. } // all components fixed, m
Boundary : { Id: 4 ConditionType: Neumann NeumannValue: 0. } // normal traction, Pa; positive pushes into the surface
Boundary : {
Id: 2
ConditionType: Mixed
MixedType: DIRICHLET NEUMANN NEUMANN // per direction x y z
MixedValue: 0., 0., 0.
}
LFDetuning¶
Radiation pressure from a field solution:
Boundary : {
Id: 6
ConditionType: LFDetuning
WhichMode: 0
Directory: omega3p_results
Omega3PId: 6 // wall sideset in the vacuum mesh
Method: Gradient // Gradient, Voltage, or Powerinput
TargetGradient: 60e6
GradientDirection: 0, 0, 1 // default
SymmetryFactor: 2
StartPoint: 0.0001, 0.0001, -0.017018
EndPoint: 0.0001, 0.0001, 0.017018
}
Method: Voltage takes TargetVoltage in V and VoltageDirection; Method: Powerinput takes TargetPowerinput in W.
MeshDump¶
MeshDump : {
WriteDeformedMesh: on // body mesh with displacements
WriteDeformedEMMesh: on // vacuum mesh with mapped displacements
MeshDeformScale: 1.0 // multiply displacements; for mode shapes
EMMeshInputDir: omega3p_results
WriteStressStrain: on
}
Transient¶
Time-dependent thermal analysis inside ThermostaticProblem:
Transient : {
TimeStepping : {
Type: Thermal
Scheme: BackwardEuler
MaximumTime: 8.e1 // s
DT: 4.e-1
InitialT: 0. // start time
InitialTemp: 25. // °C
}
Excitation : {
Power: 1.
Pulse : {
Type: Monochromatic
Frequency: 1.
Rise periods: 10
T0: 0.
}
}
}
The Excitation block reuses T3P's pulse machinery to modulate the heat load in time; Fall periods and TMax are optional as in T3P.
MUMPS¶
New since CW23
Optional top-level MUMPS block, read by every module that factorizes with MUMPS (Omega3P, S3P, T3P, Pic3P, TEM3P, Gun3P). Since v2026.11 a factorization that runs out of workspace (MUMPS error -9) is retried automatically with a doubled memory margin, 45 to 90 to 180 to 200 percent, instead of aborting. The block tunes that behaviour; without it only the retry is active.
MUMPS : {
MemoryRelaxation: 90 // starting margin, percent (default 45)
MaxMemoryRelaxation: 200 // stop retrying above this (default 200)
MemoryPerRank: 14000 // optional cap on workspace per rank, MB
ICNTL_35: 1 // any raw MUMPS ICNTL(k), applied last
}
If a log shows a retry line, set MemoryRelaxation to the value that succeeded to skip the wasted first attempt. Results do not depend on the margin.
Post-processing¶
acdtool mesh deform exaggerates a deformed mesh for viewing, and acdtool postprocess project decomposes a static or harmonic displacement field onto a set of mechanical eigenmodes. See the acdtool command syntax.