| name | dqmc-dev |
| description | Workflow for modifying DQMC C code, adding new measurements, and running tests. Use when editing source code, implementing new observables, debugging, or validating code changes. |
Code Development
Build & Test
make
make clean
cd test && make && ./test_greens
Smoke Test
After any code change:
dqmc-util gen Nx=4 Ny=4 U=4 dt=0.1 L=20 n_sweep_warm=50 n_sweep_meas=100
build/dqmc sim_0.h5
dqmc-util summary sim_0.h5
Adding New Measurements
-
Add to X-macro list in src/rc/sim_types.h:
#define MEAS_EQLT_LIST \
\
X(my_meas, num_ij)
-
Implement measurement kernel in src/rc/meas.c
-
Add analysis function in dqmc_util/analyze_hub.py (and update reshaping/symmetrization if needed):
@observable(
description="my new observable",
requires=("meas_eqlt/n_sample", "meas_eqlt/sign", "meas_eqlt/my_meas"),
)
def _my_meas(ctx):
return core.jackknife_noniid(
ctx.data["meas_eqlt/n_sample"],
ctx.data["meas_eqlt/sign"],
ctx.data["meas_eqlt/my_meas"],
)
Key Code Patterns
Dual compilation: Files in src/rc/ compile twice. Use RC(name) macro for real/complex dispatch.
Memory: Use my_calloc() for 64-byte aligned allocations.
Profiling: Wrap with profile_begin(name) / profile_end(name).
Definition of Done