Solid¶
Solid solves the authored 3D model as-is, in the authored coordinates. It is the default frame. See Frames for what a frame decides.
import femforge as ff
config = ff.SimulationConfig(
frame=ff.Solid(),
mesh=ff.MeshConfig(step="models/actuator.step", global_mesh_size=2 * ff.U.mm),
domain=ff.DomainConfig(
materials=[ff.materials.Air(), ff.materials.N52()],
tags=[
ff.EntityTag(
selector={ff.TagKey.MAGNETIZATION: "N"},
conditions=[ff.Magnetization(direction=ff.Direction(1, 0, 0))],
),
ff.EntityTag(selector={ff.TagKey.NAME: "mover"}, conditions=[ff.ForceComponent(label="mover")]),
],
),
)
print(config.frame.label, config.frame.model_dim)
| Property | Value |
|---|---|
kind |
"solid" |
| Fields | none |
| Mesh dimension | 3 |
| Solve coordinates | the authored coordinates |
| Elmer coordinate system | Cartesian |
Geometry¶
A solid frame meshes the authored STEP itself when the config has no parametric geometry. Nothing is converted, so nothing is cached for the geometry stage.
Physics¶
Every Physics member solves as itself, except MAGNETOSTATICS_2D, which is the axisymmetric stack: select MAGNETOSTATICS with Axisymmetric instead.
Conditions¶
| Condition | Rule |
|---|---|
| Magnetization | Any direction; its three components are emitted as authored. |
| CurrentDensity | Rejected: it drives MAGNETOSTATICS_2D, which a solid frame has no form for. |
| ForceComponent | Force and torque about any authored axis. |
Results¶
Force and torque come back as Elmer integrated them over the whole model. Result.axial_force projects a Component's force onto the axis you pass; a solid frame has no axis of its own, so it raises without one.