circuitRF Reference Guide

The 3D Editor

Drawing a cell in three dimensions — boxes, cylinders, faces, booleans, fillets, STEP parts, placed cells, bond wires and ports — in circuitRF's own 3D editor, which needs no solver to draw anything. Taught through two examples, an MMIC in a lidded package and a coaxial connector launching onto a board.

The 3D editor is where a cell's 3D view is drawn: solids, sheets, bond wires and ports in three dimensions, with the cells they are built from placed inside them. It is part of circuitRF. It is not a front end to Palace or openEMS, and it needs no solver installed. Everything on this page up to Simulating — drawing, editing, placing cells, wires, ports, setups, check, explain and section pictures — works on a machine with no 3D solver at all. A solver is needed for one thing: pressing Run. When you do, circuitRF offers to install the one the setup names (see 3D EM ▸ Getting the solvers), and EM Solvers says which one suits which problem.

This page teaches the editor through the 3D Package example — an MMIC die in a ceramic package with a lid — which was drawn with exactly the gestures below. Open it with File ▸ New ▸ Examples ▸ 3D Package. The 3D Connector example teaches the operations the geometry kernel adds — booleans, fillets and STEP parts — through a coaxial connector launching onto a board (below).

The 3D view of a cell

A cell can have up to four views: a schematic (what it does), a symbol (how it is placed in a schematic), a layout (its artwork, layer by layer) and a 3D view (its solid model). The 3D view is a file of its own, <cell>/3d/<name>.c3d, a small JSON document you can read and diff, and the Project panel lists it under the cell like the others. File ▸ New 3D Design… makes a cell with an empty one, New 3D View on a cell's menu in the Project panel adds one to an existing cell, and New 3D View from Layout makes one holding the cell's own layout, ready to extend — the quickest way to take a layout you have already set up for EM into 3D. It brings in the layout's port labels as the 3D view's own ports, each the sheet a 3D run of the layout would build: with the layout's 3D setup when it has one, else with a default driven setup, which a message says. A port you do not want is deleted like any other.

When the layout was made from the cell's schematic (Update Layout from Schematic), the new 3D view also gets one VAR per name that drives it — each cell parameter, and each VAR of the schematic at its current value — linked by name, so a dimension written with w50 follows the schematic's w50 when the cell is simulated by EM in 3D. See EM cells.

The 3D view's ports are its own from then on, each remembering which placed layout and which of its port labels it came from. When a placed layout's port changes afterwards (its Width or Use edge width, or where its label is), opening the 3D view, or saving the layout while it is open, posts one message per port that no longer matches; nothing is rewritten. A port whose label has moved is usually refused, drawn only as a red outline that cannot be clicked. Update Ports from Layout — on the port's row in the object tree, on the placed layout's row, and on the view's own right-click menu while any port is out of step — replaces those ports with what the layouts build now and brings in any label no port stands for yet, as one step you can undo. Two placed layouts often both number a port 1: the later one's comes in at the next free number, and the Messages panel says which became which. Ports the layouts do not state are left alone.

A port's Number… and Name… are on its right-click menu, in the canvas and in the Object Tree. A number another port already uses is refused; a default name such as P3 follows the new number, and a name you gave is kept. A renumbered port still knows its layout label.

The camera is the viewer's: middle- or Alt-drag to orbit; Shift-drag to pan; right-drag or scroll to zoom (with Use Hertzon interactivity off: drag to orbit; right-, middle-, Alt- or Shift-drag to pan), or Ctrl/Cmd+= and Ctrl/Cmd+−; the arrow keys pan and Shift+arrow orbits; Home or Ctrl/Cmd+0 fits, Ctrl/Cmd+E fits the selection; 1 is isometric, 2–7 the six orthographic views, P toggles perspective, L the realistic view; C turns on the clip plane. A new 3D view opens orthographic. The line along the bottom of the view is the status line: what the armed tool wants next, or what the last edit did, or why it was refused.

The example: an MMIC in a package

File ▸ New ▸ Examples ▸ 3D Package copies a workspace with two cells to a folder you choose, and opens its README.md, which carries the numbers quoted here.

P1 P2 Materials Alumina GaAs Gold Gold Gold Port (its sheet, projected) Isometric outline, viewed from +x +y +z Silhouettes and sharp edges, orthographic. NO hidden-line removal: edges behind a surface are drawn too. Air box: xmin, xmax, ymin, ymax, zmin, zmax: PEC P1 P2 Materials Alumina GaAs Gold Gold Gold Port (its sheet, projected) Isometric outline, viewed from +x +y +z Silhouettes and sharp edges, orthographic. NO hidden-line removal: edges behind a surface are drawn too. Air box: xmin, xmax, ymin, ymax, zmin, zmax: PEC
The same package with the lid and two walls lifted off: the alumina base, the die-attach pad on four vias, the MMIC die placed from its layout, a bond wire from each die pad to a lead, and the two leads running out to the walls.
P1 P2 Materials Alumina GaAs Gold Lid alloy Gold Gold Port (its sheet, projected) Isometric outline, viewed from +x +y +z Silhouettes and sharp edges, orthographic. NO hidden-line removal: edges behind a surface are drawn too. Air box: xmin, xmax, ymin, ymax, zmin, zmax: PEC P1 P2 Materials Alumina GaAs Gold Lid alloy Gold Gold Port (its sheet, projected) Isometric outline, viewed from +x +y +z Silhouettes and sharp edges, orthographic. NO hidden-line removal: edges behind a surface are drawn too. Air box: xmin, xmax, ymin, ymax, zmin, zmax: PEC
The 3D Package example's package, closed: a gold floor, four gold walls and a lid of a lid alloy, 400 x 320 x 40 mil inside, drawn in the 3D editor. Through it, the leads and the die.
xmin: PEC xmax: PEC zmin: PEC zmax: PEC P1 P2 Materials Alumina GaAs Gold Lid alloy Gold Gold Port (its sheet, projected) XZ section at y = 0 µm A solid is drawn where its bottom ≤ y < its top; a sheet within 0.01118 nm of its plane. Ports are drawn projected onto the plane. Air box: ymin, ymax: PEC xmin: PEC xmax: PEC zmin: PEC zmax: PEC P1 P2 Materials Alumina GaAs Gold Lid alloy Gold Gold Port (its sheet, projected) XZ section at y = 0 µm A solid is drawn where its bottom ≤ y < its top; a sheet within 0.01118 nm of its plane. Ports are drawn projected onto the plane. Air box: ymin, ymax: PEC
The package cut along its leads: floor, alumina base, the die on its attach pad, the two wires down to the leads, the walls and the lid. The cavity is ten times wider than it is tall.

The cavity is 400 × 320 mil and 40 mil high — three cell parameters, cav_w, cav_l and cav_h, that the floor, the base, the walls and the lid are all written in terms of, so changing one redraws the package (see Dimensions as expressions). The die, its pad, the leads, the wires and the ports do not depend on them: a bigger cavity leaves the die where it is and moves the walls out.

The second example: a connector launch

File ▸ New ▸ Examples ▸ 3D Connector is a coaxial connector launching onto a 50 Ω microstrip at a board's edge — the 3D problem an RF board meets most — and it is built from the operations the geometry kernel adds:

P1 P2 Materials PTFE PTFE-glass laminate Connector alloy Copper Copper Port (its sheet, projected) Isometric outline, viewed from +x +y +z Silhouettes and sharp edges, orthographic. NO hidden-line removal: edges behind a surface are drawn too. Air box: xmin: PEC · xmax, ymin, ymax, zmin, zmax: absorbing, 488 µm beyond P1 P2 Materials PTFE PTFE-glass laminate Connector alloy Copper Copper Port (its sheet, projected) Isometric outline, viewed from +x +y +z Silhouettes and sharp edges, orthographic. NO hidden-line removal: edges behind a surface are drawn too. Air box: xmin: PEC · xmax, ymin, ymax, zmin, zmax: absorbing, 488 µm beyond
The 3D Connector example's launch: a connector housing united with its flange, the flange imported from a STEP file, against the edge of a board with a 50 ohm line; the centre pin reaches out over the line.
xmin: PEC xmax: absorbing, 488 µm beyond zmin: absorbing, 488 µm beyond zmax: absorbing, 488 µm beyond P1 P2 Materials PTFE PTFE-glass laminate Connector alloy Copper Copper Port (its sheet, projected) XZ section at y = 0 µm A solid is drawn where its bottom ≤ y < its top; a sheet within 0.01208 nm of its plane. Ports are drawn projected onto the plane. Air box: ymin, ymax: absorbing, 488 µm beyond xmin: PEC xmax: absorbing, 488 µm beyond zmin: absorbing, 488 µm beyond zmax: absorbing, 488 µm beyond P1 P2 Materials PTFE PTFE-glass laminate Connector alloy Copper Copper Port (its sheet, projected) XZ section at y = 0 µm A solid is drawn where its bottom ≤ y < its top; a sheet within 0.01208 nm of its plane. Ports are drawn projected onto the plane. Air box: ymin, ymax: absorbing, 488 µm beyond
The launch cut along the coax's axis: the housing, the bore it keeps as a PTFE fill, the centre pin with its rounded tip resting on the line, and the board's laminate and ground.

Its README.md lists the gestures that drew it, in order — Box, Cylinder, Boolean ▸ Subtract… with the Tool selected first and Keep tools ticked, Export STEP… and Import STEP…, Boolean ▸ Unite…, E and Fillet… — and what each run measured. The experiment it exists for is one click: untick Enabled on the pin's fillet row in the object tree and Simulate again. Palace meshes the fillet as a curved surface; openEMS, whose grid cell at the tip is wider than the fillet's radius, says before the run that it will not represent it. What each makes of it is in EM Solvers ▸ What each solver sees of curved geometry.

Selecting

O, F, E and V choose what a click selects — a whole object, one face, one edge, or one vertex — and the toolbar has a button for each. What is under the cursor is highlighted; a click selects it, Shift-click adds or removes, Esc clears.

Snapping

The cursor snaps to a vertex (a square marker), an edge's midpoint (a triangle), the nearest point on an edge (an ×), a face's centre (a circle), and otherwise to the grid (a small +) on the drawing plane. A vertex wins over anything else within reach. Snapping reaches into placed cells: the corner of a pad on the die, inside U1, is a target in the package. Only what you can see is a target, except through a translucent object or with the clip plane on.

The magnet button turns snapping off and on, and the buttons beside it turn each kind on and off; these are your settings, not the document's. Hold Alt (Option on a Mac) to suspend geometry snapping while drawing; the grid still applies. The Snap box beside Unit sets the grid step (the example uses 0.5 mil); changing it moves nothing already drawn. A ≈ before a coordinate means the point is not exactly on the database-unit grid (a corner of something rotated by an odd angle).

Tracking from a point. While a tool is armed, rest the cursor on a snap point (a vertex, a midpoint, a centre) for half a second: a small green + marks it as a reference. Move away and the cursor locks onto the lines through it along x, y and z, drawn dashed in the axis's colour, with a diamond marker on the line. Near an edge the point stops where the line meets that edge; elsewhere it moves along the line in grid steps. Two references give the point where their lines cross, such as the x of one corner and the y of another. This lets you draw a sheet from a trace's corner straight down to a ground plane that has no vertex beneath it: rest on the corner, then move down to the ground's edge. A vertex under the cursor still wins. Resting on a reference again removes it. A reference is forgotten after ten seconds unused, and when the object is finished or the tool is put away. Alt (Option) suspends tracking along with geometry snapping.

Drawing

The drawing plane. Shapes are drawn on a plane — XY, YZ or XZ at an offset along its normal — chosen from the toolbar's plane box and offset field (a bare number is the display unit; 25um or 10mil says its own), from 3D ▸ Drawing Plane, or from geometry: with a tool armed, Ctrl-click (Cmd-click on a Mac) a face to draw on it, or Ctrl/Cmd+Shift-click a snapped point to move the offset there. A faint grid lies on the plane; moving the camera never moves it.

The tools are on the toolbar, under 3D ▸ Draw, and at the cursor: press Shift+A, then one letter.

Letter Tool Clicks
B Box a corner, the opposite corner, then the height
S Sheet two corners (a conducting rectangle with a thickness)
G Polygon a click per vertex; click the first, press Enter or double-click to close
L Polyline construction lines, never solved; Enter or a double-click ends one
Y Cylinder the centre, the radius, then the height
E Sphere the centre, then the radius; it is centred on the drawing plane
O Ellipsoid the centre, then one radius; its three semi-axes start equal and are set in Properties (see Phantoms)
P Port two corners on the plane (see Simulating)
C Lumped element two corners across a gap, as a port (see Simulating)
W Wire two pads, then the loop height (see Bond wires)
H Heat source two corners on the plane, then its name and power (see Temperature)
T Probe a click on a face: the temperature there (see Temperature)
M Mesh region a box, then the element size inside it (see Temperature)

Typing instead of clicking. While a shape is in progress, type a digit and a box opens at the cursor showing what the next click would set — width and depth, then height (or radius, then height). Tab moves between the fields, Enter accepts, Esc goes back to the mouse. A value can carry its own unit (127um while drawing in mil) and can be an expression (see Dimensions as expressions). Each new object takes the toolbar's material and a name you can change (box1, cyl1, …), and each is one undo step. Esc cancels a shape; pressed again it puts the tool down.

How the example's package was drawn. With the material box on Gold and the XY plane at 0, Shift+A B, one click anywhere, then typed: cav_w + 2*wall Tab cav_l + 2*wall Enter, floor_t Enter. That is the floor's size; its corner was typed in Properties (-cav_w/2 - wall, -cav_l/2 - wall, -floor_t), and its name (floor) there too. The alumina base, the attach pad, the leads, the walls and the lid are drawn the same way. The four vias are one cylinder (radius 2, height 5) and Array… (right-click): 2 × 2 at 36 × 20 mil. The walls and the lid were drawn last: drawn first, they would hide the inside while you work on it.

Extrude (a sheet's menu, 3D ▸ Modify, or a polyline selected in the tree) pulls a closed polyline, a polygon or a rectangle into a prism: move to set the distance and click, or type it. K keeps the source.

Phantoms

A phantom is a body for SAR work, made of nested layers, each its own material. 3D ▸ Draw ▸ Phantom offers six:

Phantom Layers, outermost first Starts as
Head (3 ellipsoids) skin, skull, brain: concentric ellipsoids, each shell taken off every semi-axis openEMS's head phantom: semi-axes 100, 80, 100 mm, shells 9 mm
Body (3 cylinders) skin, bone, tissue: coaxial cylinders of one length openEMS's body phantom: radius 100 mm, 260 mm long, shells 8 and 10 mm
Flat Phantom shell, liquid: the liquid in an open-topped box, the shell on its floor and four walls 300 × 200 × 152 mm outside, a 2 mm shell, 150 mm of body liquid
Generic Head (circuitRF's own) ear-left, ear-right, shell, liquid: an ellipsoid shell of head liquid with a flat ear spacer each side semi-axes 100, 78, 115 mm, a 2 mm shell, spacers 4 mm thick and 25 mm in radius
Sphere, Box one homogeneous body radius 50 mm; a 100 mm cube

A phantom is one object: it moves, turns, hides and is left out of the solve as one, and the tree shows its layers under it. Where layers overlap the innermost wins, so the brain is brain, not skin. Properties shows only the dimensions its shape uses — semi-axes, radius and length, or size, and the shell thicknesses — and one material per layer under Layers, outermost first. The layers start as the tissue library's records of those openEMS phantoms (Add Tissue Materials, in the technology editor or at the top of the Materials dialog a layer's New Material… opens, puts the library beside the technology; see Materials); the flat phantom and the generic head start in the tissue-simulating liquids and circuitRF's own shell material. Every layer is solved as a lossy dielectric. Flatten Phantom (its menu) replaces it with one ordinary solid per layer, <phantom>_<layer>, in a group named after it; the solve is the same.

What each phantom's dimensions are drawn from, and the tissues that fill them: Tissues and phantoms.

A sheet on a cylinder is a strip of zero thickness on the cylinder of one radius about x, y or z — a birdcage coil's rung or end ring — written in the .c3d as a CylinderSheet (circuitrf reference 3d has its fields: the axis, a point on it where the strip starts, the radius, the length along the axis, and the azimuth it starts at and sweeps through, in degrees). There is no tool to draw one; the 3D view draws it as written. Only openEMS's cylindrical grid about the same axis solves it (A cylindrical grid); every other solver refuses it by name.

An ellipsoid on its own (Shift+A O) is a centre and three semi-axes along its own x, y and z, so turning it turns its axes. Its surface is curved: face edits, fillets and boundaries are refused on it, as on a sphere.

Moving and editing

Whole objects (Object mode; right-click, or 3D ▸ Modify). 3D ▸ Modify is greyed out until something is selected, and each item in it is enabled only when it can act on the selection — the same rule the right-click menu follows, where a greyed-out item's tooltip says why:

Faces and vertices (Face mode, F; Vertex mode, V):

Why a solid never opens. Every edit keeps a solid closed. No face is ever deleted, so there is no Delete in Face mode, and a face that can no longer be flat is split into flat triangles named after it (top.0, top.1). An edit that would make a solid pass through itself is drawn in red and refused, naming the faces. A closed solid is what a mesher needs; an open one would be a hole in the problem that nothing reported. A shape keeps its kind as long as its own dimensions can say the result — otherwise it becomes a polyhedron with the same face names, and the status line says so.

Measure (M): two snapped clicks give both points, their differences and the distance, in the display unit; every number copies, and pastes back into a dimension box exactly.

Groups

A group gathers objects and placed cells under one name, so the whole of a part — a stage, a lid and its walls, a row of pads — is picked, moved and changed as one thing.

Transparency

How see-through an object is drawn belongs to the object, not to its material: a lid can be made see-through to show the die under it without changing the lid's alloy, which every other object made of it shares and which belongs to the technology.

Appearance

An appearance says how an object looks in the realistic view: how metallic, how rough, how see-through. It belongs first to the material — forty copper objects should not need forty edits — and an object or a placed cell may override it, because plating is usually not modelled: a copper trace that should look gold-plated is the common case. A boolean's operand — its Blank, or a Tool, kept or not — has no appearance of its own: it looks like its material, unless the top-level operation states one, which styles everything that operation makes. The Inspector says so when one is selected.

The keys are glTF 2.0's metallic-roughness set, and every one is optional:

Key Range Meaning
BaseColor #rrggbb a metal's reflectance, a dielectric's body colour
Metallic 0–1 1 for a metal, 0 for a dielectric
Roughness 0–1 0 a mirror, 1 matte
Transmission 0–1 see-through: glass, quartz, a thin laminate
Ior 1.0–3.0 the optical index of refraction
Clearcoat, ClearcoatRoughness 0–1 a glossy layer over the body, such as solder mask
AttenuationColor #rrggbb the tint light picks up passing through
AttenuationDistance metres, above 0 how far it travels before taking that tint
Like a material's name that material's look first, with these fields over it

Model: kept in the drawing, left out of the solve

To try a run without the lid, a second row of bond wires or a fixture, untick its Model: it stays on screen, where you can still select, move and edit it, and it is left out of every simulation run — EM and thermal alike — until you tick it again. Hiding an object is not the same thing: a hidden object is still solved.

Copy and Paste between 3D views

Objects copy out of one 3D view and paste into another — in this workspace, another workspace, or another running circuitRF — or back into the same one:

Reference images

A photo or a drawing can be put into the 3D view to trace — a die photo, a package outline from a datasheet, a fixture drawing — or to lay the design over and compare. It goes in two ways: as a sheet on the drawing plane, or mapped onto a face of an object.

An image sheet

An image on a face

Dimensions as expressions

Wherever a dimension is typed — the box at the cursor, Properties, the Array panel — you may type a name or an expression: cav_w, 2*wall, cav_l/2 + wall. Names are VARs of the 3D view or the cell's parameters, and the Variables panel (the x button) lists both. An unknown name opens a Define strip under the box, so a name can be made on the spot.

The example's names:

Name Value What it is
cav_w, cav_l, cav_h 400, 320, 40 mil cell parameters of Package — each a VAR promoted with Promote to Cell Parameter
wall 20 mil a VAR: the wall thickness
floor_t 2 mil a VAR: the floor's thickness
lid_t 5 mil a VAR: the lid's thickness

Changing one redraws everything that uses it: set cav_w to 480 in the Variables panel and the floor, the base, the east and west walls and the lid all move; the die and the leads stay where they are. Dragging a face whose size is an expression (N) writes the name, not the field, so every other object using that name follows too.

Units in an expression

A number may carry its own unit, written straight after it with no space: cav_w + 40mil, 10um + 1mil, 2*wall + 0.5mm. A number with no unit that is added to, subtracted from or compared with a name that has a unit takes the box's unit: cav_w + 40 typed in mil is cav_w plus forty mil. A number that multiplies or divides stays a plain number: 2*wall is twice the wall.

A lone m is milli, not the metre, exactly as in a netlist: 2m is 2 mm. Write mm to say so, or metre for metres; the box refuses a bare 2m and check warns about an m inside a length. check also warns about any dimension over 1 m, the mark a unit slip leaves.

A VAR follows the same rule: its unit scales its expression only when the expression names nothing with a unit of its own. w2 = 2*w in mil, with w = 10 mil, is 20 mil, and w3 = w + 5 in mil is 15 mil. A VAR written w = 10mil needs no unit of its own.

Booleans, fillets, chamfers and STEP parts

Four kinds of object are built by OpenCASCADE, the geometry kernel that ships inside circuitRF, rather than by the editor itself: a Boolean (subtract, unite or intersect), a Fillet, a Chamfer and a Step part (one solid of an imported STEP file). Settings ▸ Solvers says whether this installation has the kernel. All four are made in the editor — booleans and fillets below, STEP parts in STEP — and a .c3d holding any of them is drawn, checked, explained and elaborated. The kernel is Open CASCADE Technology; Help ▸ About and its third-party notices say which version and under what licence.

A boolean owns its operands. This one subtracts a bore from a lid:

{
	"$type": "Boolean",
	"Name": "lid",
	"Op": "Subtract",
	"Blank": {
		"$type": "Box",
		"Material": "Lid alloy",
		"Min": [0, 0, 500000],
		"Size": [4000000, 3000000, 250000]
	},
	"Tools": [
		{
			"$type": "Cylinder",
			"Name": "bore",
			"Base": [2000000, 1500000, 400000],
			"Axis": "Z",
			"Length": 500000,
			"Radius": 300000
		}
	]
}

Making a boolean

Select two or more solids (or sheets, below) in Object mode — the first one you select is a Tool, the last is the Blank — then right-click ▸ Boolean ▸ Subtract…, Unite… or Intersect… (also under 3D ▸ Boolean). A panel opens at the view's top right, as Array…'s does, and the camera stays free:

Sheets combine with sheets. Two or more sheets in one plane (the same plane, at the same offset) make a boolean the same way, with no geometry kernel needed: a patch with a notch cut out and its feed joined on, a ground plane with a cut-out. Each sheet keeps its own rectangle and its expressions, so the result follows its variables; the result is a sheet of the Blank's metal and thickness. A sheet selected with a solid, or sheets in different planes, leave the commands disabled with the reason.

Polylines, bond wires and placed cells are not operands, and the disabled menu item says why for each (a placed cell's solids belong to its own cell: push into it, or flatten it).

In the object tree a boolean is a node with its operation's icon; its Blank and then its Tools are beneath it, and a boolean inside a boolean is a node inside a node. By material, a boolean is listed under its Blank's material and its operands only under it; by type, booleans have a group of their own. Right-click a boolean for Edit Operands, Dissolve Boolean (its operands become top-level objects again, the Blank under the boolean's name) and Enabled; right-click a Tool for Make Blank and Remove from Boolean.

In Properties a selected boolean shows its Operation, Enabled, Keep tools and Blank (and Swap for two operands), and its material — the Blank's, changed on the Blank. Each change is one undo entry and is built at once; a change the kernel cannot build is kept, and the node is flagged with the reason, so undo is one keystroke away rather than the combo snapping back.

Editing an operand. Double-click a boolean's result (or select it and press Ctrl/Cmd+]) to enter it: the result is drawn as a ghost and its operands solid, and the status line says Editing operands of 'lid' — Esc to leave. An operand then moves, rotates, mirrors, duplicates (the copy is a top-level object), takes a material, and has its faces and vertices edited, exactly as any object does; a drag moves only its drawing, and the boolean is built again once, on the release. Esc or Ctrl/Cmd+[ leaves. Clicking an operand's row in the tree enters its boolean too.

A result's faces are for reading: a port, a boundary, Measure, snapping and Drawing Plane from Face all use them, but moving or extruding one is refused — "'lid' is made by a boolean: edit its operands (double-click it) or the operation in Properties."

Rounding edges: Fillet and Chamfer

Select edges of one solid in Edge mode, then right-click ▸ Fillet… or Chamfer… (also under 3D ▸ Modify ▸ Edge). A box, prism, cylinder, polyhedron, boolean result or STEP part can be rounded, and so can a solid that is already; a sphere has no edges, a sheet has no volume to round, a bond wire is made from its points, and a placed cell's solids belong to its own cell — each disabled item says which. Without the kernel both are disabled with the reason, and Edge mode still works.

In the object tree a rounded solid is one node, listed as the solid it rounds, with its fillets and chamfers as rows beneath it, innermost first (Fillet 50 µm — 4 edges). In Properties a row shows its Radius (or Distance and Distance 2, and Flip), Enabled, and its Edges — Show selects them in the view and Edit… reopens the panel on them — and Remove unwraps it: the solid returns unrounded, in its place and under its name. Each is one undo entry; a change the kernel cannot build is kept and the row flagged. Enabled off draws and solves the solid unrounded, and a boundary on one of the fillet's own faces then says it "exists only while its fillet is enabled".

A rounded solid's faces are for reading too: "'lid' is rounded by a fillet: edit the box (disable the fillet, or change it in Properties)." With every fillet and chamfer on it disabled, its faces and vertices are edited as the solid's own, and switching them back on rounds the edited solid — an edge still there is rounded again at the new size.

Snapping to curves. On a solid the kernel built, a snap reaches the true vertices only (a curved edge's drawing points are not vertices), an open curve's midpoint along the curve, and the centre of a circle or an arc — shown as the face-centre marker with a dot in it — which is how a pin is put exactly on a bore's axis. A point found along a curved edge is on its drawn chord, so the status line marks it ≈.

Without the geometry kernel

A development build, or an installation missing its geometry-kernel folder, cannot build these objects. A 3D view that holds any of them — even a disabled one — is not opened: a dialog names the objects, says why, and offers Open Settings ▸ Solvers, where the kernel's row says how to restore it. A 3D view with none of them opens exactly as before. circuitrf check reports one error per such object and exits 1, and em refuses before writing anything. A document that places a child using one still opens; that one instance is refused and Simulate says which.

Both solvers take a kernel solid, and they do not treat its curves alike:

Those lines appear under each setup in Simulate ▸ Setup Analyses…, in circuitrf check (at their own severity; they never change the exit code), and in the run's messages. None of them stops a run. explain (which reports the kernel, each operation's operands, its face and edge counts and its smallest radius) and render work on kernel objects too.

STEP: importing and exporting

STEP (.step, .stp) is how a solid model travels between mechanical tools: a connector's maker, a housing's designer and a CAD package all read and write it. circuitRF reads its solids into a 3D view and writes a 3D view — or a layout — out as one. The geometry kernel does both, so without it both commands are disabled with the reason.

Import STEP… (File ▸ Import ▸ STEP…) reads the file, off the editor's thread and cancellable, and opens a table of its parts. A part that is one solid is one row. A part made of several solids — a package's leads and its body, say — is one row per solid, because each solid becomes its own object with its own material:

The imported package is one row in the tree and one click in the view: a click on any piece selects the whole group, and Move, Rotate, Mirror, Duplicate, Delete, Hide and a material act on all of it. To give one piece its own material, expand the group's row in the tree and use the piece's row: its right-click Material submenu, or Properties with the row selected. In the view, B steps through what lies under the cursor, which reaches a single piece. Setting a material on the group's own row sets every piece.

A Step object is a solid like any other: it takes a material, moves, and is a boolean operand or a fillet's target. Its faces are face1, face2 … as the file's shape numbers them, and they mean something only for those bytes — which is why the object records the file's Hash. When the source file changes (a new revision from the maker), Reload from Source on the object's menu (or 3D ▸ STEP) reads it again and re-matches every boundary, probe, plot, image and fillet on it by geometry, then says what moved; a part the new file no longer has is said by name. A part the new file adds is offered in the import table, unchecked.

Split into Solids

A Step object can hold a whole part of several solids as one object — a package whose leads and body share one material because they are one object. check names such an object: a warning when its solids' colours differ, since they are probably different materials, and a note otherwise. explain x.c3d --object <name> lists its solids with each one's colour, face count and volume.

Split into Solids (the object's right-click menu, or 3D ▸ STEP ▸ Split into Solids) turns it into what an import makes of such a part: one Step object per solid, gathered in a group named after the object, in the place the object had in the tree and in construction order. A click in the view still takes the whole package; each piece then takes its own material from its row.

The command is enabled for one selected Step object with no Solid whose part has more than one solid. Its tooltip says which condition failed otherwise. It is one undo entry.

From the command line there is no split verb: the pieces are written as Step objects with Solid 1 … n (the numbers explain lists), and check names any reference that no longer lands.

Editing an imported piece

A Step piece moves, rotates, takes a material and is a boolean operand, but its dimensions are not parameters: the face and vertex editor edits a box, a prism or a polyhedron. Three commands on a piece's right-click menu (and 3D ▸ STEP) turn it into one of those, so a lead can be lengthened to meet its pad, a body thinned, or a detailed body replaced by a plain block that meshes smaller.

A model's faces and vertices often disagree by a micrometre or two (the file's own tolerance). The conversion puts every vertex on its flat faces, so a body with only flat faces still converts exactly.

Some package models draw a lead's plated end as a zero-thickness fin up the side of the mould: two faces of the solid back to back on one plane, with a top that is only a line. A fin has no volume, so it cannot be part of a polyhedron or a prism. Convert to Polyhedron and Replace with Prism cut the fin out of the solid and keep it as a sheet of the same material, named after the piece (DFN_10_sheet). The solid's volume does not change. The new object and the sheet go in a new group named after the piece, inside the piece's own group. The command says this first and converts only when you agree.

Each keeps the piece's name, material, group, placement, appearance and transparency, so nothing moves, and each is one undo entry. The copied STEP file is not touched. Every face boundary, probe, field plot, face image and thermal boundary on the piece moves to the face of the new object that coincides with it. A reference with no such face, such as a box face that the piece's chamfer cut back, stops the command with the reason in Messages; it is never moved to the nearest face; a reference on a curved face is refused this way too, since no single facet is it. A command that does not apply is disabled, and its tooltip says why: an outline that is not an extrusion, for Prism, and a piece of several solids, which needs Split into Solids first.

Export STEP… (File ▸ Export ▸ STEP…) writes the active 3D view or layout:

The 3D Connector example's flange was made this way: drawn in its own cell, exported, and imported into the launch — see the second example.

The realistic view

The Realistic view button on the toolbar (the camera aperture, after Perspective and Orthographic), 3D ▸ View ▸ Realistic View and the L key in the view all redraw the view with physically based materials lit by a studio: metals reflect it, dielectrics take their body colour, gloss and translucency from their appearance. It is for pictures. It is a view, not an edit: it changes nothing in the model or in any result, and it is not saved in the design. Every design opens with it off unless Settings ▸ General ▸ Open in realistic view is on. Selecting, hovering, modelling and the clip plane all keep working underneath it.

The first time a studio is used in a session it is prepared in the background, and until then the view is drawn as usual; the status line says Realistic · preparing … and then names the environment and the exposure.

What steps aside. The CAD chrome is hidden: the edge lines, the drawing grid, the mesh, FDTD-grid and section overlays, the air box, ports, boundaries and face tints, and reference images. The selected object's outline and the face-mode highlights stay, because it is still the editor. A field plot is drawn exactly as in the ordinary view unless you choose otherwise (see Field plots in the realistic view). An object's stated transparency still applies; a dielectric's ordinary see-through look does not, because the appearance's Transmission decides that here. Copy and Export Picture… draw the realistic view without the hover or the selection.

A new 3D view is created with a Look that brings all of that chrome back except the air box: its ShowEdges, ShowGrid, ShowOverlays, ShowPorts, ShowBoundaries and ShowImages are true. Untick any of them in the Look panel. A .c3d with no Look block hides them all.

The Look block. How the scene is lit is saved in the .c3d, so a picture can be made again later. Every key is optional; an omitted key takes the default shown:

"Look": {
  "Environment": "Studio",
  "Rotation": 30,
  "Intensity": 1.0,
  "Exposure": 0.0,
  "Background": "Theme",
  "ShowPorts": false
}
Key Values
Environment Studio (soft), HighKey (white, low contrast), Dark (a black room with strong rim lights), or a Radiance .hdr file's path, relative to the .c3d
Rotation degrees about +z, turning the studio around the model
Intensity 0–10, the environment's brightness
Exposure −10 to +10 EV
Background Theme (the view's own colour), #rrggbb, "#rrggbb,#rrggbb" (a vertical gradient, top colour first) or Environment (the studio itself)
ShowEdges, ShowGrid, ShowOverlays, ShowAirBox, ShowPorts, ShowBoundaries, ShowImages true brings that item back, drawn exactly as the ordinary view draws it
Shadows false turns off the key light's shadows (default on)
AmbientOcclusion false turns off the contact shading where surfaces meet (default on)
Ground false removes the shadow-catching floor under the model (default on)
Camera the camera pictures are taken from, written only by Set Camera (below): Direction (from the target toward the viewer), Target and Distance in DBU, FovY in degrees, Projection
FieldStyle Exact (the default), Lit or Glow: how a field plot is drawn (below)
FieldOpacity 0–100, default 100: below 100 the material under a field plot shows through its colours

A Show… key only lifts the realistic view's own hiding: an air box you have hidden, an overlay that is off, or a hidden object stays hidden. The Look is edited in the Look panel, or by writing the file. A Look edit is undone like any other, and no run sees it: editing it never makes a result stale.

Your own environment. Name a Radiance .hdr (an equirectangular image, +z up) instead of a studio. An .exr is not read. A file that is missing or does not read is a warning in check; the view then lights the scene with Studio and the status line says why.

Shadows, contact shading and the ground. The studio's key light casts shadows: soft from High key's broad softbox, crisp from Dark's small one. An object whose appearance lets half or more of the light through (Transmission 0.5 or more) casts none, and ports, boundaries and field plots never do. Contact shading darkens the ambient light where surfaces meet, such as a die on its substrate or a wire's foot on its pad; it is worked out from what the view shows, so it follows the camera. The ground is a floor just under the model's lowest point that draws only those two darkenings, so the model rests on something instead of floating. It is never seen from below, and the section plane does not cut it. A field plot's colours are never shadowed or shaded. Each of the three can be turned off in the Look.

How it is drawn. The colours go through the Khronos PBR Neutral tone curve, which keeps base colours faithful. A glossy surface reflects the studio, a rough one spreads it. Translucency is approximated: what shows through is dimmed and tinted by the attenuation colour, and the reflection is added on top, but light is not bent: the view is drawn at interactive speed, not ray traced.

Field plots in the realistic view

A field plot's colour is a measurement, read against its legend, so by default the realistic view leaves it alone: everything around the field is lit, and the field itself is the colour map's own colour, exactly as in the ordinary view. Exposure, the tone curve, shadows and contact shading never touch it. The FieldStyle key, or Field plots in the Look panel, offers two other styles for pictures that want more drama:

Style What it does The field's colours
Exact Nothing: the field is drawn as a flat, unlit colour map. exactly the legend's
Lit A clear-coat sheen on the field, from the studio and its key light, so it looks like a coating on the part. The sheen only ever lightens a colour toward white, and never changes its hue. lightened where the sheen falls
Glow The field stays exact and the model and background around it are dimmed by 2.5 stops, so the field seems to glow. exactly the legend's

FieldOpacity below 100 lets the material under a plot show through it: a field painted on copper then reads as copper under the colours. A plot that normally replaces the faces it is painted on draws them under it instead.

The indicator. When the colours are no longer exactly the legend's, the picture says so: a small Lit Fields label under the field legend with Lit, Blended Fields with an opacity below 100, and Lit, Blended Fields with both. With the legend turned off, the label sits alone in that corner. It is in the view and in every picture (Copy and Export Picture…), whatever the legend and caption options say, and it cannot be turned off. Exact and Glow carry no label.

A field seen through glass. A clip-plane slice inside a substrate whose appearance has Transmission (fused silica, or your own) shows the field inside the material through it.

Changing how things look

There are two places to change an appearance, and the choice is about how many things should change.

Both show the same fields. A field that is stated shows its value; one that is not shows, greyed, the value it takes, and its tooltip says where that comes from (role default, Like 'Gold', material 'Copper' (generic-materials.cmat)). The × beside a field removes the statement, so the field comes from the next one down again; Clear override removes an object's whole appearance. Several objects whose values differ read mixed, and an edit writes all of them.

Plating is Like. Choose Gold in the Like box on a copper trace and it takes gold's whole look; any field it states itself still wins, so Like Gold with a higher Roughness is brushed gold. The same box on a material makes one material look like another (a solder alloy like tin) without restating its numbers.

Live. Dragging a slider shows the result in the 3D view as you drag, and the change is one undo step when you let go. In the Materials editor a sphere swatch shows the material under the default studio, so a look can be judged with no 3D view open. In the Materials dialog every change is shown in each open 3D view on that technology while the dialog is open; Cancel puts the view back exactly as it was. Neither route rebuilds the model: the view only redraws its materials. Editing works whether the realistic view is on or not; while it is off, the Inspector's group says so and turns it on in one click.

The Look panel opens from the small arrow beside the Realistic view button, or from 3D ▸ View ▸ Look…. Opening it turns the realistic view on, since that is what it changes. It holds the environment (a studio, or Load .hdr…), its rotation, intensity and exposure, the background and its colours (a swatch opens a picker inside the panel; Done keeps the colour), Shadows, Contact shading and Ground, the field plots' style and opacity, and one Show box for each kind of CAD chrome the realistic view hides. Every change is saved with the design and is one undo step; a slider is one step per drag. The × beside a number puts it back to its default (rotation 30°, intensity 1, exposure 0 EV, field opacity 100 %), also one undo step. A new .hdr is prepared in the background and the old environment stays on screen until it is ready; one used before comes back at once.

Environment Studio Load .hdr… Rotation 30 × Intensity 1 × Exposure 0 × Background Theme Lighting Shadows Contact shading Ground Field plots Style Exact Opacity 100 × The colours are exactly the legend's. Show Edges Grid Overlays Air box Ports Boundaries Images Pictures Pictures are taken from the live view. Set Camera Go to Camera View Clear Environment Studio Load .hdr… Rotation 30 × Intensity 1 × Exposure 0 × Background Theme Lighting Shadows Contact shading Ground Field plots Style Exact Opacity 100 × The colours are exactly the legend's. Show Edges Grid Overlays Air box Ports Boundaries Images Pictures Pictures are taken from the live view. Set Camera Go to Camera View Clear
The Look panel, as it first opens: the studio environment and its rotation, intensity and exposure; the background; shadows, contact shading and the ground; the field plots' style and opacity; and one Show box for each kind of CAD chrome the realistic view hides.

A picture's camera. The camera is not normally saved with a design. Set Camera in the Look panel is the one exception: it saves the current view, and Export Picture…, render and a glTF export take their picture from it. Orbiting afterwards never changes it. Go to Camera View brings the live view back to it; Clear removes it, and pictures follow the live view again.

None of this touches a result. An appearance, a material's display colour, the Look and the picture camera are display only. A run never reads them, and changing any of them, in the design or in a material library, never makes a result out of date.

Pictures and drawings

Right-click the view (on anything, or on nothing) for five ways to take it out of circuitRF:

A vector picture is drawn as the view is — in perspective when the view is, from the camera's own eye, at the scale the view has at its orbit centre, and orthographic otherwise — and it leaves out what you have hidden. It is framed as the view is, at the view's zoom — zoom in for a close-up. Conductors keep the colours the view draws them in; dielectrics are outlined in grey.

An object given a transparency above 0 hides nothing in a vector picture or a drawing: the edges behind it are drawn as solid lines, as seeing through it means on paper, while it keeps its own edges. A section fills it at its transparency.

Every picture carries what the toolbar's middle group shows: the axis indicator, the drawing grid and the scale legend (the scale bar, bottom right; also 3D ▸ View ▸ Scale Legend) — turn one off and it leaves the pictures too. Copy and Export Picture… also keep a measurement with its numbers and the selection's highlight; neither keeps the cursor's hover label, the snap marker or the move handles. A vector picture has no drawing grid.

Export Drawing…

The dialog chooses what goes on the sheet:

Every view is at one scale, a round one — 5:1, 2:1, 1:10 — chosen as the largest that fits every view, and stated in the title block with the document's name. A length measured on one view can be compared with another, and with a ruler on the printed page. The dialog remembers its choices (not its sections) for next time.

Working out which edges are hidden takes a moment on a large model; above 400,000 triangles it is skipped, the edges are all drawn, and the message that reports the export says so.

Exporting for another renderer

circuitRF does not ray-trace. When a picture needs what only a path tracer gives — refraction through a glass lid, caustics, light bouncing between parts — File ▸ Export ▸ glTF… writes the model as one binary glTF file (.glb), which every path tracer and most 3D tools open. The realistic view approximates those effects; the other renderer computes them.

What is written is what the view draws: every shown solid and sheet, with the same triangles and the smooth normals the realistic view shades with. A hidden object is left out, and so are the air box, ports, boundaries and face tints, the grid, and reference images. An object left out of the solve (Model off) is written: it is drawn. Names come along: each object is a node named as in the tree, and each group is a parent node.

Each appearance becomes a glTF material with the same numbers, since circuitRF's appearance is glTF's own metallic-roughness model. Base colour, metallic and roughness are always written; transmission, index of refraction, clearcoat and the volume's attenuation are written only where they differ from glTF's defaults, as optional extensions, so a viewer that does not know one still opens the file. A material is named after the circuitRF material, with +override added where an object's own appearance changed it. The volume's thickness is the object's smallest extent, which is an approximation and the export notes say so.

The dialog offers:

The summary line counts the objects, triangles and materials and names the extensions the file will use, before anything is written.

circuitRF's model is z-up; glTF's is y-up. The file's top node turns the model so it stands up in every viewer, and moves it to where it sits in the design. Lengths are in metres, glTF's unit and circuitRF's.

circuitrf convert x.c3d -o x.glb writes the same file headlessly; see From the command line.

Hierarchy: placing cells

Design ▸ Place Cell Instance… with a 3D view active offers every cell with a 3D view or a layout, and a View choice between them. The example places the Thru die cell's layout: a layout comes in through its own technology's stackup, bottom up — back-side metal, 100 µm of GaAs, the metal on top — bounded by its board outline, the die edge. Its objects are named U1/… (U1/GaAs, U1/Metal1/1), and its conductors are pads a wire can land on. A placed layout brings only the metal drawn in it: a ground plane that a 2D setup takes from the stackup is not added, so draw it in the layout when a port returns to it.

A placed layout's dielectric

A placed layout's dielectrics are drawn, and they are part of the problem Palace and openEMS solve. A stackup gives a dielectric no outline, so every slab is cut to the layout's board outline, as with the die edge above, or, with no outline, to one rectangle round everything the layout draws, the same for every slab.

The Messages note for the build says which. Draw a board outline when the board is bigger than its copper. The whole rule, and how it differs from a planar setup's laterally infinite dielectric, is in 3D EM ▸ How far the dielectric reaches.

Bond wires

W (or Shift+A W, or 3D ▸ Draw ▸ Wire; W again puts the tool away). A wire runs between two metal objects: click the one it starts on (any face — it lands on that object's top, above the point clicked), then the one it ends on, then move to set the loop height and click, or type it. The toolbar sets the diameter, the metal, each end's bond (ball or wedge) and the section; the diameter, the metal and the points per wire start from Settings ▸ Wirebonds, as in the layout view. Across hierarchy is the usual case: the example's wires start on the die's pads, inside U1, and end on the package's leads, which a .wBond cannot do because it belongs to one layout.

Simulating

Setups. A 3D view carries its own EM setups. Simulate ▸ Setup Analyses… (or the toolbar's tune button) lists them as cards: Add, Duplicate, Rename, Remove, Make Active; a double-click opens the same panel a .cem opens, less the layout row. The example has two: Driven, a Palace S-parameter sweep from 2 to 30 GHz, and Lid modes, a Palace eigenmode solve. The active setup is the one Run runs and whose air box is drawn.

Ports. Shift+A P draws one on the drawing plane, two corners; or right-click a flat rectangular face, Make Port ▸ Lumped or Wave. A wave port takes any flat face, a disc for one, as the rectangle round it, since its rectangle is only a region of the box's face. Which kind a face can take depends on where it lies, not on what it was drawn as: a wave port is a region of an air-box face (a sheet drawn there is the usual way to state one), and a lumped port bridges two conductors on opposite edges (a face of a small gap block does exactly that). The menu offers only the kind that would resolve, and the other's tip says why. Which way round a lumped port is comes from what it touches: each edge is tested against every conductor, one opposite pair must touch one conductor each, and the one that is ground — or failing that, the larger — is −. A lumped port is drawn as a two-colour checkerboard over exactly its own rectangle — from its − edge to its + edge and across its full width — with its number and a flat arrow painted on it, centred, pointing to the + edge; anything in front of the port hides it, arrow and all. While it is drawn, the arrow (or the reason there cannot be one) follows the cursor. The example's two ports are 5 × 5 mil rectangles on the YZ plane at each lead's outer end, from the floor up to the lead: each runs from floor (−) up to its lead (+). Flip on its menu turns it round; a wrong arrow turns every transmission term by 180°, so look before a run.

Expand Edges and Contract Edges. A sheet or lumped port need not be drawn exactly. Right-click a drawn rectangular sheet or a lumped port, in the view or on its Object Tree row, and choose Expand Edges or Contract Edges: All, one edge (-X Only, +X Only) or both edges of an axis (X), for the two axes of its plane. A refused port has no sheet in the view, so reach it from its row.

Expand Edges grows an edge until it meets the next solid or sheet, and an edge already touching one stays. Contract Edges shrinks an edge back to the next boundary inside the rectangle, and never reaches the opposite edge, so the rectangle cannot collapse; when both edges of an axis would stop at one boundary, the nearer takes it. Each item's tip says what it will do and what it will stop at, and an item that would move nothing is greyed out. A PEC face of the air box stops an edge too, and a boundary between two dielectrics does not, so an edge inside a multilayer stackup goes on to its copper. An object with Model off is ignored.

A sheet reaching through a plate at one end and short of a plate at the other takes two steps: Contract Edges ▸ +Z Only, then Expand Edges ▸ -Z Only, and Make Port ▸ Lumped is then available. A dimension holding a variable writes that variable, as a drag does, or is refused with Replace with Number on offer; a dimension holding only numbers (100+20) becomes the number. A sheet with an outline rather than a rectangle, a rotated sheet, a locked image sheet and a port turned to an angle do not take these commands.

A port at an angle. Between pads that are not square to the axes, such as a part placed at 45°, a lumped port lying flat in the XY plane can be turned. Draw a sheet across the gap with its two ends along the two pads' facing sides, then Make Port ▸ Lumped on it: a sheet that is a rectangle at any angle becomes a port at that angle, or set Angle in the port's Properties (degrees, counter-clockwise seen from above). It must be a rectangle: a lumped port applies one even field from end to end and turns voltage and current into impedance with its length and width, so its two ends must be straight, parallel and the same distance apart everywhere. A sheet whose width changes along it, whose corners are not square, or that has more than four corners is refused, saying which. Each end must lie along one straight side of its copper, to within two database units, and not at a corner, a curve or past the end of the side. Copper read from a layout was rounded to its grid when it was imported, so the solved problem moves that side by at most that tolerance onto the port's corners, and the two meet exactly; the layout is not changed. A wave port, a port on the XZ or YZ plane and a gap on a cylinder stay upright, and openEMS refuses a turned port: run it on Palace or EMerge.

Lumped elements. Shift+A C draws a resistor, inductor or capacitor across a gap, two corners exactly as a port is drawn; the gap is found the same way. Properties sets Topology (parallel or series) and any of R, L and C, each with its unit; an empty value is left out. A value can be a variable (Ctune), so a tuning sweep changes it by re-running. It is drawn as its outline with a capacitor mark across the gap and listed under Lumped elements in the tree. It is not a port: nothing excites it and the result has no row for it. openEMS solves it; Palace refuses it in this version.

A wave port on a face met by several conductors — two strips inside one shield, a coupled pair over a ground — is one port with a terminal per signal conductor. Each terminal is its own numbered port of the result, with its own Z0. One conductor is the reference, the one every terminal's voltage is measured from: the one in the ground set (the setup's Ground net, or a PEC face of the air box), or failing that the one with the largest surface; the air box's PEC faces count as one reference, so strips between them (a stripline whose ground planes are the box) each take a terminal. Make Port ▸ Wave on such a face writes the reference and one terminal per other conductor, numbered with the next free numbers from left to right along the face. The 3D view draws each terminal as an arrow from the reference to its conductor, in the port colour, with its number at the head. A face whose reference cannot be decided (two candidates with equal surfaces) says so on the menu item. A port with two terminals runs on both solvers when its lines' modes travel at different speeds (a microstrip pair; a stripline is openEMS's); one with three or more runs on openEMS only (EM Setup ▸ Several conductors on one face).

The air box is the region solved in: each face a distance beyond the geometry, and a boundary — PEC, PMC, symmetry or absorbing — chosen by right-clicking the face. The example's package is its own shield: both setups set every face to PEC with no padding, so the box lies flush against the floor, the walls and the lid, and nothing outside the metal is meshed. Boundaries on faces (right-click a dielectric's face: Perfect Conductor, Conductive Surface) put a wall inside the model without drawing metal.

Solved marks. Each setup's card says whether its last result still matches the model, and the tab and the workspace tree mark a 3D view whose results do. See 3D EM ▸ Is this solved?.

Run. Simulate ▸ Run (or the workspace toolbar's Run). Palace or openEMS is started with the same progress, Cancel and messages as any EM run, and the result opens in the Data Display. Afterwards the Field bar shows the saved fields on the geometry that was solved. On a machine without the solver, Run is refused and offers to install it — and that is the only gesture on this page that needed one.

What the example gives. Every figure was measured once, on an Apple M4 with 10 cores and 16 GB, running macOS 27.0, Palace 0.18.1 and Gmsh 4.15.2; yours will differ.

Seeing the mesh before solving. The grid button beside Run Analysis, or Simulate ▸ Mesh Only, makes the active setup's mesh and stops. It works on Palace setups and on thermal setups, whose mesh Gmsh also makes; a thermal setup driven from a circuit runs that circuit's harmonic balance first, because its currents decide the faces in its mesh. The triangle button beside the eye button then shows any mesh on disk for the active setup, whether a run, a stopped run or a mesh pass made it, and its tooltip says which. No fields are needed. EM setup ▸ Looking at a 3D mesh has what a pass writes and when Simulate reuses its mesh.

The triangle button draws the boundary triangles. The mesh plane button beside it draws the tetrahedra on a plane of their own, turning the mesh on if it is off. The arrow beside that button opens the plane's panel: choose its axis and drag it through the model. The panel stays open while you pan and orbit the view, until its ✕. The view follows the slider as you drag; when the mesh is too slow to redraw at a usable rate, the readout follows and the plane moves when the slider rests. It is separate from the clip plane and from every field plot's plane, so moving one never moves another. While the clip plane is off, the mesh plane also cuts the solids so the section can be seen, and the arrows button keeps the other side; while the clip plane is on, the clip plane does that cutting and the mesh plane stays where it is. A clip-plane field plot stays on its own plane throughout.

When the model or the setup has changed so that a run would mesh again, the line under the view says so, and the mesh is drawn as it was made. For a thermal setup driven from a circuit, that line says a run decides, because only its harmonic balance can.

The lid's resonance

A lid turns a package into a cavity, and a cavity has resonant modes. The lowest, for a cavity much wider than it is tall, has its electric field pointing from the floor up to the lid, strongest in the middle — exactly where the die is. If that mode lands inside the band the circuit works in, the package couples the output back to the input through it: the classic package problem. The Lid modes setup finds it directly, with an eigenmode solve.

Lid modes (the one mode above 20 GHz): 35 s of Palace, peak 4.0 GB. The mode is at 22.16 GHz with a Q of 318 — the gold, the lid alloy and the ports' 50 Ω all load it — and it is the driven sweep's notch.

The external check. The closed form for a rectangular cavity 400 × 320 × 40 mil with a 5 mil alumina slab on its floor puts the lowest mode at 22.23 GHz. That is the one number in this section that is not circuitRF's own output. The drawn package is 0.3 % lower: the die, its pad, the leads and the wires are what the closed form leaves out.

Move the mode. Set cav_w to 480 in the Variables panel: the walls, floor, base and lid move out and the die stays put. The closed form then says 20.87 GHz — a mode below 22 GHz, walking toward the band — and Run on Lid modes finds where the drawn package puts it.

For the question on its own, a resonance inside the band and a grounded post that moves it out, open File ▸ New ▸ Examples ▸ 3D Eigenmode (EM Setup ▸ Eigenmodes quotes its numbers).

Temperature

The same model solves for heat. A thermal setup (Simulate ▸ Setup Analyses…, the thermometer button — or any setup whose Solver is set to Thermal) is solved by circuitRF's own steady-conduction solver after Gmsh meshes every solid — air is not meshed. What it needs is drawn in the view, and what it is worth is typed in the setup, so one model carries several thermal setups beside its EM ones. What a run models, and three worked examples with their numbers (File ▸ New ▸ Examples ▸ Thermal: …), are in Thermal; this section is the gestures.

A gold bond wire in a mould compound, cut along its length: the wire hottest at mid-span, the heat spreading into the mould around it
A thermal run of Thermal Output Wires: a bond wire carrying current inside a package's overmold, cut along its length. The wire is coloured from its own solved temperature, the mould compound around it from the 3D field.

The places. These are drawn in the view but are not objects: they are never solved as metal, never snapped to, and an EM setup ignores them. Each has a group in the object tree (Heat sources, Probes, Mesh regions) whose rows select, rename, hide and delete, and a switch under 3D ▸ View. Selecting a row shows its fields in Properties, dimensions included, each a number or an expression.

Boundaries. Every face nothing names is insulated. In Face mode, right-click a face, Thermal ▸ Fixed Temperature…, Convection…, Insulated or Clear: each writes the active thermal setup (greyed, saying why, when the active setup is not a thermal one). A conditioned face is tinted — blue a fixed temperature, green convection — and listed under Thermal boundaries in the tree. Untick a boundary's row to stop drawing its tint (in this view only: the boundary still applies). Click the tint, or its row, and Properties edits it — Kind, T or h and Ambient, each a number or an expression, and Select face for the face under it. With two touching objects selected, Thermal ▸ Contact Resistance… overrides the technology's interface resistance for that contact, prefilled with the technology's value when it states one.

Contacts. Where two solids touch, heat crosses perfectly unless a resistance is stated: the technology's ThermalInterfaces give one for a pair of materials (GaN on SiC, a die attach), and a document's contact override replaces it for one contact only. The run splits the contact — each side keeps its own nodes — and joins the two through the resistance, so a clip plane through a die attach shows the temperature step. The run's notes list every contact in force, where its value came from and the area it covers.

Effective blocks (3D ▸ Draw ▸ Effective Block): a box drawn over a via field, as a mesh region is. Enabled, a thermal run replaces the board dielectric, copper planes and via barrels inside it with one block conducting (k_xy, k_xy, k_z) — hundreds of thin barrels stop forcing tiny elements. It is an approximation and is drawn disabled: enable it from its row or in Properties, which show the tensor it would carry; disabled, the geometry is solved as drawn, so comparing the two is one toggle. A box that cuts into anything else (a flange, a die) is refused, naming it. The mixture, per layer of the box (every height a replaced solid starts or stops), from the area fractions of copper, dielectric and void measured exactly over the box's footprint:

Each material's k at 25 °C is used, so the block's tensor is constant. It ignores how heat crowds into each barrel through a thin plane, which makes it run cooler than the vias drawn — measure the difference on your own board before trusting it.

Submodels. A thermal setup whose Thermal page says Submodel: cut from another thermal setup, to region a mesh region, solves only that region's box, meshed at the region's size, with its cut faces fixed to the other setup's solution; every other boundary is as written. The whole-model result is reused only when the document and every file it was solved from are as they were — a placed layout, the technology, a material library — and solved first when they are not (the notes say which, naming the file that changed). A mesh region a submodel is cut to no longer refines the whole-model run — that is what keeps it coarse. The run compares the heat crossing the cut faces with the whole model's over the same faces and warns when they differ by more than 5 % point by point: the region is too small, the fine detail changes the temperature at its edge, enlarge it. A heat source straddling the box is refused; one inside must carry the same power as in the whole model.

Symmetry. Model half (or a quarter) of a symmetric device: right-click the face you cut it on, Symmetry Plane. The plane is drawn hatched across the model where it cuts it, labelled Symmetry X = …, and listed under Symmetry planes, whose tick shows or hides it; select its row to move it in Properties (At, a length or an expression). It must lie on the model's extent; it stays insulated (a condition on it is refused), and All exposed faces never takes it. What is drawn is what is solved: give the sources the power of the modelled part. Measures read SymmetryFactor (2 per plane) so a whole-device figure is explicit — Rth_full = (Tmax(ch) - 25) / (Pdiss * SymmetryFactor); nothing is multiplied silently. A plotted temperature is drawn mirrored across the planes (3D ▸ View ▸ Temperature ▸ Mirror Symmetric Halves turns it off), and hovering the mirrored half reads the modelled point's value and says so.

The setup's Thermal page, top to bottom: Sources (each heat source's default, and this setup's override), Boundaries (the list the menu writes, and All exposed faces: convection at an h and an ambient), Sweep (up to two variables), Measures (one per line — Rth = (Tmax(die) - Tavg(flange)) / Pdiss — checked as you type), Mesh (order, elements across a source and through the thinnest solid, grading, the solver, the convergence check), and Balance (k(T) on or off), Submodel (above), and the three small-signal sections below — Rth matrix, Thermal impedance and Pulse train. Under Mesh, the size of the run is estimated before anything is meshed.

Plot Temperature. A temperature picture is a field plot — a row of the tree's Field Plots group, saved with the document, edited in the Properties Inspector (see the 3D view). After a run of the active thermal setup, right-click a face, Plot Temperature, to add that face to the temperature plot being drawn, or start one with it (again to take it off; several faces accumulate); 3D ▸ View ▸ Temperature ▸ All Faces draws a plot on every exposed face, and On Clip Plane one on the clip plane's section — the way to see a channel under a field plate. The items are greyed, with the reason, when there is no thermal result or the model has changed since it ran. The colour range is the true minimum and maximum of what is painted — the peak is the answer, so it is never clipped — and the legend reads °C; the plot's Fix range across the sweep (or Fix Range Across Sweep in the menu) makes it the minimum and maximum over every sweep point, so stepping the sweep never rescales the colours. The plot's Solution is the sweep point shown. When the run has more than one point, a sweep slider at the view's top left moves the drawn plot to another point: one control per swept variable, labelled with its value and unit (Pdiss = 7 W). Dragging it shows the points as it passes them, and letting go keeps the point shown as the plot's Solution, one undo step. ◀ and ▶ move one point each. The probe table, the line plots and the hot spot follow it. Hover a painted face for the temperature there (interpolated, not the nearest node); a ring marks the hot spot with its temperature and its object. A bond wire whose run tabulated its temperature is coloured along its length, and hovering it names the wire and the distance along it.

Along a line. Along… on the toolbar (or 3D ▸ View ▸ Temperature ▸ Temperature Along…) takes two points and plots the temperature between them, with both end temperatures and their difference — Rth by hand, with nothing added to the document. A line probe's row in the tree plots its own, Plot T(s). Probes on the toolbar lists every probe statistic and every measure at the sweep point shown, a column per point on request, with any probe past its limit in orange.

Rth matrix, Z_th and pulses

They are read off the same mesh after the sweep, at its first point, each with every boundary made homogeneous (fixed temperatures and ambients 0) — so they are properties of the structure, not of the heatsink temperature. With k(T) on they are the small-signal response about that point's temperatures, and the notes say so.

From the command line

Every step above has a command-line spelling, and none of them needs a solver except em:

Keys at a glance

Key What it does
O, E, F, V Select objects, edges (Edge mode, for Fillet… and Chamfer…), faces, vertices
B, Shift+B The next thing behind the selection; back toward you
Ctrl/Cmd+A Select every shown object (3D ▸ Select All Objects); hidden ones are left out
H Hide the selection; show it if any of it is hidden (3D ▸ Hide / Show Selection). In the view or the object tree
Shift+A then a letter Box, Sheet, polyGon, polyLine, cYlinder, sphEre, ellipsOid, Port, Capacitor (lumped element), Wire, Heat source, Temperature probe, Mesh region
W The Wire tool; again puts it away
digits, Tab, Enter Type a dimension instead of clicking
Esc Back one step: the typed box, the shape, the tool, Face/Vertex/Edge mode, the selection
G, R, X/Y/Z Move, rotate; hold to an axis
Ctrl/Cmd+D Duplicate and move
Ctrl/Cmd+G, Ctrl/Cmd+Shift+G Group the selection; ungroup the outermost selected group
Ctrl/Cmd+C, Ctrl/Cmd+V Copy the selected objects; paste a 3D copy (Copy and Paste). In the view or the object tree
Ctrl/Cmd+E Fit the selection; with nothing selected, everything shown
N, Shift+E, T Push/pull a face; extrude a face into a new solid; Touching/Flush while aligning
double-click an edge Its tangent chain (Shift adds it)
double-click a row in the object tree Bring Properties forward for that row, when nothing is listed beneath it; a row that opens just opens or closes
M Measure
Alt (Option) Suspend geometry snapping while held
Ctrl/Cmd-click a face Draw on that face's plane
Ctrl/Cmd while placing The bottom-centre (die-attach) handle
Ctrl/Cmd+], Ctrl/Cmd+[ Push into a placed cell, or enter a boolean to edit its operands; pop out, or leave it
Home or Ctrl/Cmd+0, 1–7, P, L, C Fit; standard views; perspective; realistic view; clip plane
Ctrl/Cmd+=, Ctrl/Cmd+−; arrows; Shift+arrows Zoom in, out; pan; orbit 15°
In the object tree: Shift-click, Ctrl-click (Cmd too on a Mac) Select every row between; add or remove one row

Every control, in detail

The sections above teach the editor through the example. This one is the reference: every control, in the order a pane presents them, with the rules each one follows.