File formats and outputs
Every file RayRF reads or writes: the project document, the exported solver case, and the artifacts a run produces. Exact filenames matter, so this page lists them.
Project files
A project is one JSON document with the .rfsim extension. It holds the whole project: the layer stackup, primitives, domain, FDTD settings, parametric variables and constraints and generators, embedded conductor bitmaps, imported reference traces, the editor thumbnail, saved view state, and (unless externalized) the last run's simulation results.
The document carries a schema_version, currently 8. A file written by a newer build refuses to open and reports the file and build versions rather than silently dropping the fields it does not understand. Legacy .emflux project files still open.
Results sidecar
A project can keep its heavy run results out of the .rfsim in a sidecar file next to it with the same base name and the .rfsimout extension, so Patch.rfsim pairs with Patch.rfsimout. The point is version control: commit the .rfsim, gitignore the .rfsimout. Only the simulation results and imported reference traces move to the sidecar. Geometry, settings, and plot settings stay in the .rfsim.
Externalization is set two ways:
- Per project, from the "Separate geometry and settings from results" option in Project Settings. The choice is saved in the
.rfsimand is the default for every save. - Per run, from the CLI:
rayrf run --externalize-results project|run|off.offkeeps results inline, the others write the sidecar.
If the sidecar cannot be written, the save falls back to inline results, so a save never loses data. On open, a sidecar that is missing, corrupt, from a newer build, or renamed from a different project is skipped and the project still opens.
Exported solver case
Before a run, the project is serialized into a case directory under _sim_export/<case>/. This is the solver input, and it is what a remote submit uploads. It contains files.json (the case manifest, schema version 3), one PNG bitmask raster per conductor and dielectric layer plus via and area-port masks, and _license.token, the signed machine-bound token the backend checks before it runs. The internal files.json fields are not part of the documented interface and have no rayrf schema target.
Run outputs
A run writes to <project_dir>/_sim_result/<case>/ by default, or to the directory given by --out-dir. The backend runs in that directory (in a backend_run/ subdirectory when --out-dir is set) and writes its own raw files there. The post-processed artifacts, named after the case, are controlled by the CLI export flags. GUI runs and CLI runs place these files the same way.
The whole headless CLI, including every run, requires a Pro license.
Post-processed artifacts, in the output directory:
| Artifact | Filename | When |
|---|---|---|
| S-parameter table | <case>.csv | Always |
| S-parameter plot | <case>.png | Always |
| Touchstone | <case>.s1p or <case>.s2p | --export-touchstone, see below |
| Smith chart | <case>_smith.png | --export-smith |
| Polar pattern | <case>_polar.png | --export-polar, with radiation data |
| Mesh preview | <case>_mesh.png | --export-mesh |
| Mesh preview grid | <case>_mesh.vtk | --export-mesh-vtk |
| 3D radiation | <case>_rad3d.png | --export-rad3d, with radiation data |
| 3D radiation surface | <case>_rad3d.vtp | --export-rad3d-vtk |
| Surface-current heatmap | <case>_currents.png | --export-currents |
| Radiation pattern table | <case>_rad_pattern.csv | --export-rad-pattern |
| Run manifest | run_manifest.json | Always |
The S-parameter table is one long-form row per trace and frequency. Its columns are param,f_MHz,real,imag,mag,mag_dB, so the frequency column is in MHz.
The radiation pattern table concatenates the per-frequency backend patterns into one flat CSV. Its columns are freq_hz followed by the backend pattern columns: freq_hz,theta_deg,phi_deg,D_total_dBi,D_theta_dBi,D_phi_dBi.
Raw files the backend writes into the run directory:
| Artifact | Filename | When |
|---|---|---|
| Geometry | geometry.vtk or geometry.vdb | NF2FF or field export on |
| Port time series | port_signals_raw.csv | Always |
| Per-port voltage | port_NN_voltage.csv | Always |
| Per-port reflection | port_NN_s11.csv | Always |
| Radiation summary | nf2ff_summary.csv | NF2FF on |
| Radiation per frequency | nf2ff_pattern_fNN.csv | NF2FF on |
| Surface-current index | jsurf_meta.json | Surface currents on |
| Surface-current geometry | jsurf_geometry.bin | Surface currents on |
| Surface-current time frame | jsurf_td_NNNN.bin | Surface currents on |
| Surface-current frequency frame | jsurf_fd_NN.bin | Surface currents on |
| 3D field frame | step_NNNN.vtk or step_NNNN.vdb | save_vtk on |
| 3D field FFT slice | step_fft_NNNN.vtk | Full-field FFT on |
| Field frame index | frames.json | 3D field export on |
The port_signals_raw.csv columns are t_s,V1,I1. The raw port time series is also embedded in the project as compressed .npz blobs so a saved project can be reprocessed without the run directory.
Touchstone
Touchstone export writes measured values as measured and discloses any filled value in the file. A one-port run writes .s1p, a two-port run writes .s2p. A run with three or more ports is skipped with a printed message, since the headless exporter writes .s1p and .s2p only. For a two-port run, an unsimulated S12 is filled from S21 and an unsimulated S22 from S11, and each fill is written into the file as a comment:
! S12 not simulated: filled with S21 (reciprocity assumption)
! S22 not simulated: filled with S11 (symmetry assumption)OpenVDB field export
When save_vtk and export_vdb are both on, 3D field export writes OpenVDB volumes (step_NNNN.vdb and geometry.vdb) instead of VTK. vdb_threshold_frac sets a sparsification cutoff as a fraction of peak |E|: voxels below it collapse into the pruned background, and 0 disables pruning. The result imports into DCC tools that read OpenVDB volumes. VDB carries |E| only, so it cannot be combined with the H or energy field types.
Field export writes |E| by default. export_h_mag adds |H| and export_energy adds total energy density, one frame each per step, so a VTK run can write up to three volumes per frame. See Field viewer for viewing frames.
Imports
The editor and the S-Parameters tab read these files.
| Import | Where | File types |
|---|---|---|
| Conductor mask | Edit tab | PNG (*.png) |
| Reference S-parameters | S-Parameters tab | Touchstone .s1p to .s8p, .sNp |
| Reference trace | S-Parameters tab | CSV (*.csv, *.txt) |
A PNG import scales the raster to a conductor pattern on a chosen layer. A Touchstone or CSV import becomes a dashed reference overlay stored in the project, so the source file can be deleted afterward. The dxf primitive holds an imported outline rasterized as a conductor pattern.