circuitRF Reference Guide

Antennas

Patch antennas in the planar solver — the pattern, the numbers that go with it, and the limits that bound both.

The planar kernel radiates by construction: the top of the stack is an open half-space and the radiation condition is exact, so there is no airbox, no absorbing boundary and nothing to size. An antenna is an ordinary EM run with one checkbox added.

Everything on this page follows from one fact: the ground plane and every dielectric layer are laterally infinite. That is what makes the radiation condition exact, and it is also what the limits are.

Turning it on, and what you get

EM Setup ▸ Radiation pattern ▸ Compute the radiation pattern. Off by default, because it is only meaningful on a radiator. It changes no s-parameter and no mesh cell — the pattern is a post-process of currents the solve has already paid for — so switching it on does not invalidate anything.

A machine setting, not part of this design — it is not saved in the .cem, and it changes no answer. This machine reports 10 core(s). Radiation pattern Compute the radiation pattern (gain, directivity, efficiency) A machine setting, not part of this design — it is not saved in the .cem, and it changes no answer. This machine reports 10 core(s). Radiation pattern Compute the radiation pattern (gain, directivity, efficiency)
The one control that turns an ordinary planar run into an antenna run. Off by default, because it is only meaningful on a radiator; it changes no s-parameter and no mesh cell, and it disables itself with a reason when the pattern could not be computed.

Headless there is nothing to add: the flag lives in the .cem, so circuitrf em patch.cem produces the same results.

The results land in the farfield group of the same result the s-parameters do.

Output Axes Unit
U freq, θ, φ, port W/sr — radiation intensity
Etheta, Ephi freq, θ, φ, port V, r-normalised (r·E with e−jk₀r removed)
DirectivityDbi, GainDbi freq, port dBi
DirectivityPeakThetaDeg, …PhiDeg freq, port deg — where the peak is
RealizedGainDbi freq, port dBi — gain including mismatch
RadiationEfficiency freq, port % — a percentage, not a fraction
RadiationEfficiencyDb freq, port dB — the same number, 10·log10(η)
TrpDbm, PeakEirpDbm freq, port dBm — see TRP and EIRP
ReferenceInputPowerDbm freq, port dBm — what those two are referenced to
PowerAccepted, PowerRadiated, PowerSurfaceWave, PowerDielectricAndGround, PowerConductor freq, port W
BeamwidthDeg freq, cut, port deg — the cut axis carries each plane's φ
AxialRatioDb, PolarizationSense freq, θ, φ, port dB, and signed Stokes V
CoPolLudwig3Db, CrossPolLudwig3Db freq, θ, φ, port dB

One is present and refused, with its own sentence in the run's notes: FrontToBackDb. This model has no lower half-space at all — the ground plane is laterally infinite and enters as a boundary condition, so no field below it is ever computed. On a stackup whose ground layer has no conductivity that plane is perfect and the true ratio really is infinite; on one that carries conductivity the plane is a real conductor and does leak, so your structure's front-to-back is finite — but what is missing from the model is a region, not a small number, and either way a printed value would be a fiction. The run's note says which of the two it is in.

PowerDielectricAndGround was called PowerDielectric before the ground plane became a real conductor. It is the same residual with one more mechanism in it, and it is renamed rather than split because the laterally infinite plane has no basis function to integrate over — what it absorbs can only arrive as a remainder. A Data Display or script that names the old cube will find nothing; point it at the new name.

Which feeds work

Feed Pattern? Why
Inset-fed / edge-fed microstrip yes the current stays in the plane
Proximity- / gap-coupled patch yes same reason
Coaxial probe (an Internal port) no — refused by name the probe's current is z-directed, and this kernel does not radiate vertical current yet. The s-parameters are still right.
Slot, CPW-fed slot, aperture-coupled patch no an aperture in the ground plane is not representable at all

So: feed a patch from the edge. A probe feed still gives you Zin and the resonance — it is refused for the pattern only, and the run says so.

Setting a patch up

1 1
The shipped 5.8 GHz example: a 16.94 x 13.30 mm inset-fed patch on top copper, the 40 x 40 mm ground pour under it, and one edge port on the feed's end face. The pour is drawn so the run can report how large the real plane is; the ANALYSIS still terminates on a laterally infinite one.
  1. Draw the patch and its feed as ordinary metal on one conductor level. Do not draw the ground plane for the solver's benefit — the stackup's ground reference already is the plane. Drawing the pour is still worth doing, because it is the only way the run can report how big your real plane is (see limits).
  2. Put the port on the feed's end face, pointing in. An edge port is de-embedded, so your reference plane ends up at the end of the drawn feed and the solver grows whatever uniform lead the calibration needs.
  3. EM Setup ▸ Surface mesh ▸ This metal is → Radiating sheet. A patch is not a line: the current varies on the scale of a wavelength in both directions and there is no "along". With Transmission line selected instead, the mesher looks for a current direction, fails to find one on a wide sheet, and declines — leaving the cell size set by the narrowest metal on the board.
  4. Boundary cells must be Staircase. The far field does not transform a conformal (cut) cell — a cut cell's metal is not its rectangle — so a conformal mesh refuses the pattern by name. The checkbox disables itself and says so.
EM Setup - patch-5p8GHz patch-5p … Output file: patch.sNp … Layout: patch/layout/patch.clay … Mesh Simulate Save Analysis Full-wave planar For arbitrary artwork: bends, stubs, gaps, coupled structures and multi-level metal with vias. It sees discontinuities, coupling and radiation — and costs a full solve at every frequency. Full-wave planar Analysis is set to "Full-wave planar" explicitly, and Automatic never overrides that. Notes Every port returns through 'Bottom Copper (1 oz)', the ground-designated conductor at 35 µm — the highest one below the signal level at 797 µm. That plane is the negative terminal of every port in this run and is not selectable per port; it is modelled as laterally infinite. To return through a different conductor, designate that one as the ground reference in the technology editor, or name it as this EM setup's own return plane to override the choice for this run alone. The return plane's own metal is in this solve: 'Bottom Copper (1 oz)' is a laterally infinite conductor of σ = 5.8 E+07 S/m and 35 µm thickness, entered as a surface impedance on the boundary the Green's function terminates on. It is still not meshed and adds no unknowns. On an ordinary microstrip the plane is of order a fifth to a quarter of the total conductor loss, so a run with it and a run without it differ by a real amount in α and in the published |S₂₁|. 1 label/bitmap shape(s) ignored — annotation is not artwork. 1 shape(s) are on a ground-designated conductor layer and none of them is meshed. 1 of them are on 'Bottom Copper (1 oz)', THIS run's return plane, and their outline is read and carried so the run can report how large the real plane is in wavelengths — see the ground-plane note beside the results. It is still NOT MESHED: the plane in the analysis is the laterally infinite boundary the Green's function terminates on, carrying that conductor's own metal, and reading the outline changed no matrix entry and no published number. Port 1 ('1') at (8.47, -5 mm) was taken to be on the conductor's low-y (bottom) end (the port's own direction), driving current in the +y direction, at 50 Ω. Conductors Signal conductor Top Copper (1 oz) Return plane (automatic — the technology's own ground reference) Analysis levels — every level with artwork (1 available) Frequency Sweep Start 5.3 GHz = 5.3E+09 Stop 6.3 GHz = 6.3E+09 Step Points Lin Log 21 Adaptive sampling (solve fewer points, model the rest) Resonance search Ports Port 1 — low-y end 50 Ω Edge Surface mesh Cells per wavelength 20 Cells across conductor 4 Edge mesh Refine at conductor edges Edge cells 3 Boundary cells Staircase This metal is Radiating sheet Detail floor λ_ g / 200 Mesh frequency max sweep (6.3) GHz 1,611 unknowns · 850 cells · max cell 1232 µm ( λ_ g/20.2 at 6.3 GHz) · 9 across the narrowest conductor (1680 µm) · Ok Every port returns through 'Bottom Copper (1 oz)', the ground-designated conductor at 35 µm — the highest one below the signal level at 797 µm. That plane is the negative terminal of every port in this run and is not selectable per port; it is modelled as laterally infinite. To return through a different conductor, designate that one as the ground reference in the technology editor, or name it as this EM setup's own return plane to override the choice for this run alone. The return plane's own metal is in this solve: 'Bottom Copper (1 oz)' is a laterally infinite conductor of σ = 5.8 E+07 S/m and 35 µm thickness, entered as a surface impedance on the boundary the Green's function terminates on. It is still not meshed and adds no unknowns. On an ordinary microstrip the plane is of order a fifth to a quarter of the total conductor loss, so a run with it and a run without it differ by a real amount in α and in the published |S₂₁|. EM Setup - patch-5p8GHz patch-5p … Output file: patch.sNp … Layout: patch/layout/patch.clay … Mesh Simulate Save Analysis Full-wave planar For arbitrary artwork: bends, stubs, gaps, coupled structures and multi-level metal with vias. It sees discontinuities, coupling and radiation — and costs a full solve at every frequency. Full-wave planar Analysis is set to "Full-wave planar" explicitly, and Automatic never overrides that. Notes Every port returns through 'Bottom Copper (1 oz)', the ground-designated conductor at 35 µm — the highest one below the signal level at 797 µm. That plane is the negative terminal of every port in this run and is not selectable per port; it is modelled as laterally infinite. To return through a different conductor, designate that one as the ground reference in the technology editor, or name it as this EM setup's own return plane to override the choice for this run alone. The return plane's own metal is in this solve: 'Bottom Copper (1 oz)' is a laterally infinite conductor of σ = 5.8 E+07 S/m and 35 µm thickness, entered as a surface impedance on the boundary the Green's function terminates on. It is still not meshed and adds no unknowns. On an ordinary microstrip the plane is of order a fifth to a quarter of the total conductor loss, so a run with it and a run without it differ by a real amount in α and in the published |S₂₁|. 1 label/bitmap shape(s) ignored — annotation is not artwork. 1 shape(s) are on a ground-designated conductor layer and none of them is meshed. 1 of them are on 'Bottom Copper (1 oz)', THIS run's return plane, and their outline is read and carried so the run can report how large the real plane is in wavelengths — see the ground-plane note beside the results. It is still NOT MESHED: the plane in the analysis is the laterally infinite boundary the Green's function terminates on, carrying that conductor's own metal, and reading the outline changed no matrix entry and no published number. Port 1 ('1') at (8.47, -5 mm) was taken to be on the conductor's low-y (bottom) end (the port's own direction), driving current in the +y direction, at 50 Ω. Conductors Signal conductor Top Copper (1 oz) Return plane (automatic — the technology's own ground reference) Analysis levels — every level with artwork (1 available) Frequency Sweep Start 5.3 GHz = 5.3E+09 Stop 6.3 GHz = 6.3E+09 Step Points Lin Log 21 Adaptive sampling (solve fewer points, model the rest) Resonance search Ports Port 1 — low-y end 50 Ω Edge Surface mesh Cells per wavelength 20 Cells across conductor 4 Edge mesh Refine at conductor edges Edge cells 3 Boundary cells Staircase This metal is Radiating sheet Detail floor λ_ g / 200 Mesh frequency max sweep (6.3) GHz 1,611 unknowns · 850 cells · max cell 1232 µm ( λ_ g/20.2 at 6.3 GHz) · 9 across the narrowest conductor (1680 µm) · Ok Every port returns through 'Bottom Copper (1 oz)', the ground-designated conductor at 35 µm — the highest one below the signal level at 797 µm. That plane is the negative terminal of every port in this run and is not selectable per port; it is modelled as laterally infinite. To return through a different conductor, designate that one as the ground reference in the technology editor, or name it as this EM setup's own return plane to override the choice for this run alone. The return plane's own metal is in this solve: 'Bottom Copper (1 oz)' is a laterally infinite conductor of σ = 5.8 E+07 S/m and 35 µm thickness, entered as a surface impedance on the boundary the Green's function terminates on. It is still not meshed and adds no unknowns. On an ordinary microstrip the plane is of order a fifth to a quarter of the total conductor loss, so a run with it and a run without it differ by a real amount in α and in the published |S₂₁|.
The example's EM Setup, from the top down to the mesh: the kernel the registry chose and why, the conductor level, the sweep with adaptive sampling and the resonance search on, and the resolved port with its side, its reference plane and its impedance.
Edge refinement matters more here, not less

The radiating edges set the effective length, which sets the resonant frequency, which sets everything. Leave Edge mesh on. If the cell count is the problem, the Detail floor is the control that fixes it — it stops sub-wavelength import artefacts from sizing the whole grid.

Finding the resonance

A patch resonance is narrower than any sweep you would draw across a band, and adaptive sampling cannot rescue it: adaptive sampling bisects the grid you gave it and never adds a frequency you did not ask for. Ten points across a decade will miss a 1 % bandwidth completely, and the run will tell you it did not converge without telling you where the feature is.

Two things to do, in order:

Stopping without losing the run

The resonance search keeps adding solved points after the resonance is on screen, and each one is a full-wave frequency point. There is no way to see from outside how many more it intends to take, so the EM run's progress bar offers a Stop above its Cancel:

Stop finish at the next work boundary and keep everything solved. The results are packaged and written exactly as a completed run's are.
Cancel abandon the run and write nothing.

Right-click either of the EM run's two progress rows. A stopped run is a complete, ordinary result — same cubes, same .snp — which is why it always carries a note saying so, and saying what is therefore not in it:

Reading the pattern

θ spans 0…90° only, and the axis stops there rather than being padded. With an infinite ground plane the field below the plane is not small — it is identically zero — so half a sphere of structural zeros would read as a measured front-to-back ratio.

In the Data Display:

Both, on the worked example below, at 5.85 GHz:

circuitRF - Data Display patch-5p8GHz_em circuitRF farfield.U(5.85 GHz,φ=90/270 deg) dB10 farfield.U(5.85 GHz,φ=0/180 deg) dB10 0 30 60 90 120 150 180 210 240 270 300 330 0 dB(W/sr) -20 -30 θ (deg) circuitRF - Data Display patch-5p8GHz_em circuitRF farfield.U(5.85 GHz,φ=90/270 deg) dB10 farfield.U(5.85 GHz,φ=0/180 deg) dB10 0 30 60 90 120 150 180 210 240 270 300 330 0 dB(W/sr) -20 -30 θ (deg)
The two principal-plane cuts of the 5.8 GHz example patch at 5.85 GHz, normalised so the outer ring is this pattern's own peak and each ring is 10 dB down. The broader trace is the E-plane (phi = 90/270 deg, the plane containing the current); the narrower one is the H-plane (phi = 0/180 deg). Each is ONE whole-plane trace, which is why the curve crosses broadside instead of stopping at it, and the bearings round the rim are the Angles switch beside the dB-radial one.

The two planes are 3 dB down at θ = 40° (H-plane) and θ = 75° (E-plane). That difference is the infinite ground plane, and the beamwidth caveat below is about this pair of curves.

circuitRF - Data Display patch-5p8GHz_em circuitRF farfield.U(5.85 GHz) dB10 x y z 0 dB(W/sr) -10 -20 circuitRF - Data Display patch-5p8GHz_em circuitRF farfield.U(5.85 GHz) dB10 x y z 0 dB(W/sr) -10 -20
The same pattern as a 3D surface, at the same frequency: radius and colour are both the radiation intensity, here over a 20 dB range. The hemisphere is the whole of it - with a laterally infinite ground plane the field below the plane is identically zero, so there is no lower half to draw - and the shape is one broad lobe with no sidelobe and no null anywhere but exact grazing. Drag to rotate; the named views put either principal plane in the screen.

The same data at the same frequency, on a 20 dB scale rather than the cuts' 40 dB: one broadside lobe, no sidelobe, and no null until exact grazing. The surface shows that the shape holds in every azimuth; the cuts are what you read a level off.

Reading the numbers

Which gain

Includes loss Includes mismatch
DirectivityDbi no no
GainDbi yes no
RealizedGainDbi yes yes

Neither is called just "gain", because the usual failure is comparing one against a datasheet that quotes the other.

Efficiency, twice

RadiationEfficiency is Pradiated / Paccepted in percent, and RadiationEfficiencyDb is the same number in decibels — 0 dB lossless, −3 dB for half the accepted power gone. Both are published; neither is derived from the other on the plot, because the Data Display's dB transforms apply to a cube's own numbers and 10·log10 of a percentage is not a loss.

The denominator is the power accepted at the port, never the incident power: mismatch is already in the port admittance, and counting it twice is the classic double count. Total efficiency — the one that does include mismatch — is RadiationEfficiencyDb + 10·log10(1 − |S11|²), which is exactly what TrpDbm is at the default 0 dBm reference.

circuitRF - Data Display patch-5p8GHz_em circuitRF 5.4 5.6 5.8 6 6.2 6.4 -9 -8 -7 -6 -5 -4 -3 -2 -1 freq (GHz) farfield.RadiationEfficiencyDb circuitRF - Data Display patch-5p8GHz_em circuitRF 5.4 5.6 5.8 6 6.2 6.4 -9 -8 -7 -6 -5 -4 -3 -2 -1 freq (GHz) farfield.RadiationEfficiencyDb
Radiation efficiency in decibels across the example's 5.3-6.3 GHz sweep: 22.6 % at the bottom of the band, 69.3 % at its best, and 62.6 % at the 5.85 GHz the worked example quotes. The two points off the 50 MHz grid are the resonances the resonance search added, and the peak is at the upper one of them - the parallel resonance, not the series resonance the feed is matched at.

Radiation efficiency varies strongly across the band: 22.6 % at 5.3 GHz, 69.3 % at its maximum, and 62.6 % at the 5.85 GHz the worked example quotes. Quote it with the frequency it was read at.

The maximum is at 5.94 GHz — the parallel resonance, not the 5.81 GHz series resonance the feed is matched at. The two are 130 MHz apart on this patch and only the lower one is matched, so the best-radiating frequency and the best-matched frequency are not the same. The three gains split along that line: GainDbi follows the efficiency and peaks at 5.94 GHz (5.14 dBi), while RealizedGainDbi carries the mismatch and peaks at 5.85 GHz (4.50 dBi). Which one you quote decides which of the two frequencies looks best.

The mismatch factor is 1 − |S11|², read from the same published, de-embedded s-parameter the S cube carries — so the two gains differ by exactly that and by nothing else:

RealizedGainDbi = GainDbi + 10·log10(1 − |S11|²)

It is not read from the raw admittance of the port's delta-gap excitation, which at a de-embedded edge port is the gap's own parasitic rather than the antenna's input — that reads a matched antenna as badly mismatched.

TRP and peak EIRP

These are the two numbers an over-the-air report leads with, and they are the only absolute quantities here — everything else on this page is a ratio.

TrpDbm total radiated power: what the antenna radiates in every direction
PeakEirpDbm equivalent isotropically radiated power in the pattern's strongest direction

A ratio needs no excitation to be absolute against; a watt does. This analysis drives a 1 V delta gap, which means nothing in watts, so you supply the reference — in either of two places, and the second one is the one you will normally touch:

EM Setup ▸ Radiation pattern ▸ Reference input power what the run records: the value baked into the .npy and reported by circuitrf em.
Trace card ▸ Reference input power reads the same solved data against any other reference — no re-run. Headless: ref=<dBm> on a --trace.

Changing the reference never needs a re-run. A level is linear in its reference, so re-referencing is a subtraction and an addition, both exact. The run publishes its own reference as ReferenceInputPowerDbm beside the two levels — a dBm whose reference is not in the file cannot be reproduced from it, and it is also what makes the trace-card version exact rather than a guess. The trace's label always states the reference it is drawn at (@ 20 dBm in), because a picture carries no file and there would otherwise be no way to tell one reference from another.

TrpDbm      = ReferenceInputPowerDbm + RadiationEfficiencyDb + 10·log10(1 − |S11|²)
PeakEirpDbm = ReferenceInputPowerDbm + RealizedGainDbi
            = TrpDbm + DirectivityDbi

The default is 0 dBm, and at 0 dBm the two read as quantities you already have: peak EIRP in dBm is the realized gain in dBi, and TRP in dBm is the total efficiency in dB. Set it to a radio's own conducted power and both become directly comparable against that radio's measured report. It changes nothing else — a directivity, a gain and an efficiency are ratios and do not move.

Read TRP as a lower bound. Full-sphere is what TRP means, and here the sphere and the upper hemisphere are the same integral because the ground plane is infinite. A real board puts power behind the antenna that this model cannot see, and the surface-wave term — which a finite board radiates from its edges and this one books as loss permanently — pushes the same way.

The loss itemisation, and what to change for each term

The run prints a power budget at every pattern point: accepted = radiated + surface wave + dielectric and ground plane + conductor.

Term What to change
Radiated this is the output, not a loss
Dielectric + ground plane lower tanδ, or a thicker substrate (the same current radiates more of its power); and a lower-resistivity ground plane. The two are reported together because they cannot be separated here: the plane is laterally infinite and is not meshed, so it has no basis function to integrate its loss over the way the drawn metal does, and what it absorbs can only arrive in this residual. On a low-tanδ substrate it is most of what this line reads — measured at 14% of it on the MMIC starter at 30 GHz and 0.4% on FR-4 at 6 GHz, where the dielectric swamps it. A ground layer with no σ is a perfect plane and this term is dielectric loss alone
Surface wave thinner substrate, or lower εr. Booked as a permanent loss here, because an infinite substrate never gives it back — on a real board it reaches the edge and radiates, usually badly
Conductor lower-resistivity metal, or thicker metal — it is the drawn metal's own ohmic loss, taken from the stackup's σ and t. Exactly zero only when the metal really is a perfect conductor, and the budget says which of the two zeros it is printing. The ground plane's share is real and is modelled, but it is in the line above rather than this one

The surface-wave term makes the reported efficiency a lower bound on what a finite board does — an infinite substrate never gives that power back, where a real board's edge radiates some of it. The pattern is also missing the edge-diffracted contribution entirely.

Beamwidth, polarization, cross-pol

A principal-plane cross-pol of −45 dB may be −45 dB of mesh

Cross-polarization is generated by asymmetry. On a nominally symmetric patch the physical principal-plane cross-pol is very low, so what is reported there is dominated by the mesh's asymmetry — a staircased boundary is not symmetric, and neither is a grid whose lines were placed by an edge attractor at one rim. Read it as a ceiling on what the analysis can resolve: refine the mesh and watch whether the number moves. Cross-pol on the diagonal planes is a different thing — it is physical, and it is ideally non-zero.

What this will not tell you

Read this before you trust a number

A user who discovers a limit by getting a wrong answer has been failed by the documentation.

Worked example: a 5.8 GHz inset-fed patch

Tools ▸ Examples ▸ Patch Antenna installs this workspace wherever you choose it, ready to open — one inset-fed patch on the shipped PCB 2-Layer RO4350B (30 mil, 1 oz) technology, εr 3.66, tanδ 0.0037, 762 µm to the ground plane. Open patch/em/patch-5p8GHz.cem and press Simulate; it arrives with the radiation pattern, the radiating-sheet mesh and the resonance search already on, which is what makes every number below re-derivable. It is a test as well as an example — the same workspace is testdata/antenna/ in the circuitRF source tree, where the suite runs it.

Open the setup that is in the cell, not a new one

This example keeps its EM setup at patch/em/patch-5p8GHz.cem — inside the cell folder, beside the layout's own — because it is this patch's setup. Open it from the project tree. The layout editor's EM button finds it too; before 2026-09-15 it did not, and made a second, default setup instead — if you have one of those from an earlier build, it is the one at em/patch.cem and it is not the run this page describes.

Headless, on either copy:

circuitrf em <workspace>/patch/em/patch-5p8GHz.cem
1 1
The port, close up: the bar across the 1.68 mm feed's end face is where current crosses into the structure, and the arrow is which way it flows in. Everything outside that plane is the port discontinuity, and the two-line calibration removes it.
Patch 16.94 × 13.30 mm — W from λ₀/2 · √(2/(εr+1)), L from the cavity model
Feed 1.68 mm microstrip (50 Ω), inset 4.0 mm into a notch with 1.0 mm gaps
Ground pour 40 × 40 mm, drawn on the bottom copper so the run can report its size
Port one edge port on the feed's end face, 50 Ω, de-embedded
Mesh radiating sheet, staircase cells, shipped defaults → N = 1,611
Sweep 5.3–6.3 GHz, 21 points, adaptive sampling + resonance search
Run 4.9 minutes on 10 cores, with a pattern at every one of the 21 points

What it finds

The resonance search reports f₀ = 5.8131 GHz, series, Q = 35.1 at R = 38.9 Ω — |S₁₁| = −18.1 dB there, with a −10 dB bandwidth of 91 MHz (1.6 %). It also finds the parallel resonance at 5.9425 GHz, where |S₁₁| only reaches −3.7 dB: the resonance is real; it is the match that is not there. Both are points the 50 MHz sweep grid could not have shown.

The cavity model puts it at 5.7968 GHz — f = c / (2(L + 2ΔL)√εeff) with εeff = 3.402 and ΔL = 0.361 mm — so the solver and an independent analytic reference agree to +0.28 %. That is the comparison to judge the tool by; nothing in it is a circuitRF number checked against another circuitRF number.

At 5.85 GHz, the requested grid point nearest resonance:

S₁₁ −14.3 dB, Zin = 58.6 + j19.4 Ω
Directivity 6.70 dBi, peak at θ = 0° (broadside)
Gain 4.66 dBi — efficiency only
Realized gain 4.50 dBi — GainDbi + 10·log₁₀(1 − |S₁₁|²), which is what RealizedGainDbi publishes
Radiation efficiency 62.6 %
E-plane 3 dB beamwidth 146° — and see the infinite-ground caveat before quoting it
Ground plane 0.71 λ₀ across at 5.3 GHz rising to 0.84 λ₀ at 6.3, with 0.15–0.18 λ₀ beyond the metal

The power budget at that point, in the run's own words: 27.50 µW accepted = 17.22 µW radiated (62.6 %) + 1.93 µW surface wave (7.0 %) + 8.35 µW dielectric + ground plane (30.4 %) + 0 conductor. Dielectric loss is the term to attack, and the explicit zero is the perfect metal.

The mesh is not what limits this example — the frequency grid is

The example runs on the shipped default mesh, not a cut-down one. Re-meshed at 30 cells/λ (N = 1,983 against 1,611) the radiation efficiency moves 0.2 pp, Zin moves 2 %, and f₀ moves about 2.5 MHz — 0.04 %. So one convergence check is worth doing and the default passes it.

What is coarse is the sweep. 21 points across 1 GHz is a 50 MHz step against a 91 MHz bandwidth, which is why the example leans on the resonance search. For design work, narrow the band once you know where f₀ is — 5.70–5.95 GHz at 5 MHz is 51 points and resolves the notch from the grid alone, at about four times the solve time.

A cover layer over the patch does nothing, and the run says so

Adding a uniform 0.5 mm, εr 3.0 radome to this technology's stackup produces s-parameters bit-identical to the uncovered run at every frequency. The medium is built from the ground plane up to the topmost analysis level and terminated in air there, so a dielectric above the metal is not in the solve. That is measured, not inferred, and the run now warns by name — but read the numbers as the bare board's.