A suite of tools for representing and solving electromagnetic simulation problems.
Find a file
Sofus Albert Høgsbro Rose 4c91e9ab88
fix: stable 2D sim w/o any hacks
A number of fixes were needed to make >1D work in practice.

- We had to change purity/impurity evaluation to take one `xyz[i]` column vector
  at a time, since we cannot (yet?) vectorize such an evaluation over each
  column of the matrix `xyz`.
- The same goes for the SDF; each `xyz[i]` column vector becomes a scalar, which
  are collected into a new column vector.
- We emphasized naming of "bounded field", since `mnp` can only be used with the
  "unbounded field" (which pre-slices away ghost cells).
- A VERY unfortunate bug was fixed in the row-matrix constructor, which always
  set `cols: 1`.
- Curl math and rewrites were fixed and validated by hand.
- In the source rewrite math, the largest `dxyz` is now used, instead of letting
  it create a non-uniform nD Gaussian.
- For deducing `xyz` in `DIMS<FLDIMS` situations, `dxyz[i]` defaults to `0` when
  `i>=DIMS`, since this causes the "extra" `xyz` values to always also be zero
  (as they should). This is of course not the right decision when ex. choosing
  `dxyz[i]` defaults for curl, as there the default doesn't matter at all, so
  long as it is _not_ zero (as that would cause 0/0 -> NaN!).
2026-09-21 08:24:55 +00:00
pkgs fix: stable 2D sim w/o any hacks 2026-09-21 08:24:55 +00:00
.editorconfig style: adjusted formatting of all Rust and TOML files 2026-07-29 11:17:59 +00:00
.gitignore init: cleanly (re)initialized the project 2026-07-16 13:15:55 +00:00
.licensesnip init: cleanly (re)initialized the project 2026-07-16 13:15:55 +00:00
.pre-commit-config.yaml style: adjusted formatting of all Rust and TOML files 2026-07-29 11:17:59 +00:00
.tombi.toml style: adjusted formatting of all Rust and TOML files 2026-07-29 11:17:59 +00:00
Cargo.lock dump: first stable simulation 2026-09-17 15:38:49 +00:00
Cargo.toml dump: first stable simulation 2026-09-17 15:38:49 +00:00
cog.toml init: cleanly (re)initialized the project 2026-07-16 13:15:55 +00:00
LICENSE init: cleanly (re)initialized the project 2026-07-16 13:15:55 +00:00
README.md dump: first stable simulation 2026-09-17 15:38:49 +00:00
rustfmt.toml style: removed comment normalization 2026-08-20 11:37:56 +00:00

hopsim

A suite of tools for representing and solving electromagnetic simulation problems.

Policies

Developer Tooling

  • Testing (cargo test): Run the test suite for the entire workspace.

    • Usage: Run cargo test.
  • Micro-Benchmarking (criterion): Microbenchmarking to track performance changes over time.

    • Usage: Run cargo bench (criterion is an internal library).
  • License Headers (licensesnip): Add license headers to all source files.

    • Installation: cargo install licensesnip.
    • Usage: Use licensesnip to add headers. Use licensesnip remove to remove headers.
    • Alternative: Manually add license headers (prek checks this).
  • Pre-Commit Checks (prek): Simple checks run before every commit.

    • Installation: cargo install --locked prek.
    • Usage: Use prek install to install hooks, running prek before every commit in this local git repo (undo w/prek uninstall).
    • Alternative: Manually enforce all rules in .pre-commit-config.yml (CI will run prek)
  • Commit Message Hygiene (cocogitto): Enforce conventional commits, automatic versioning, and changelog management.

    • Installation: cargo install cocogitto
    • Usage: Use cog commit instead of git commit.
    • Alternative: Manually write messages w/conventional commits syntax (prek checks this).
  • CI (not yet implemented): Enforces all of the above

Commit-Message Policy

The following types must be represented in cog.toml and .pre-commit-config.yaml:

  • Standard: fix, feat, refactor, perf, ux, revert.
  • Auxiliary: deps, docs, test, lang.
  • DX: style, build, tool, ci.
  • Workflow: hotfix, dump, wip, experiment, chore.
  • Purpose: init, merge.

The following scopes must be represented in .pre-commit-config.yaml:

  • Interfaces: cli.
  • Support: emsim, miniexpr, minigrid, minicoord, libhopsim.
  • Methods: hopsim-solver, fdtd.
  • Solvers: fdtd-cpu, fdtd-cuda, fdtd-naive.
  • Sim Data: simdata-hdf5.