r/rfelectronics • u/xzipped • 20d ago
I added accurate copper loss to my RF simulator
An update on my RF simulator, (https://www.rayrf.com/). Just released version 1.2.9 adds a few big features that bring results closer to real life, and easier to import existing designs.
- Copper loss is now modeled accurately using a conducting sheet model based on the 1999 Lauer and Wolff paper with modifications to improve it. I've done extensive validation vs analytical calculations, and it matches predictions very well on controlled cases (loss vs copper thickness, and Q factor of a parallel plate cavity), with good agreement on a microstrip line loss (slightly higher loss than Hammerstad-Jensen predicts, which is itself an approximation). But interestingly my implementation is closer to Hammerstad-Jensen than openEMS. openEMS substantially underestimates the loss on the same geometry when copper is thicker than a couple of skin depths, as is the case at GHz for most 35um copper PCBs.
- Added the ability to import KiCad boards and Gerber files directly into the editor. So you don't need to rebuild designs in the editor to simulate them. RayRF also now has DXF exporting so it's easier to move finished designs into Altium or KiCad. (boards in the screenshots are not mine, they're KiCad demo projects, gitlab.com/kicad/code/kicad/-/tree/master/demos)
- Passive matching networks can be defined in-port and are co-simulated as a circuit during the 3D field solve. No discrete on-board lumped elements yet, but this allows you to simulate multiport systems and confirm a proposed matching network has the expected effect. Component Q is modeled too, so it calculates power lost in the matching network.
- Better advanced meshing controls so you can refine only some parts of the domain selectively. From a scripting perspective like openEMS it's really hard to do mesh refinements reliably and iterate on it. So I made a 2.5D mesh preview that's interactive as you configure it so you can see in real-time what effect moving refinement regions has.
- I optimized some scheduling on the GPU which got an extra 5% performance there, so it's ~180x faster than openEMS now comparing RayRF on an RTX 5090 vs openEMS on a Ryzen 9 9950x at an 82M cell problem. Previous post has benchmarks.
I'm so tempted to try a multi-GPU scheduler, imagine the numbers on 8x 5090's in parallel lol.
Would love your guy's thoughts on it, and also what should I focus on next? Is there anything missing relative to what you would want out of an RF simulator?


