dqmc-dev

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.

$ 설치

git clone https://github.com/edwnh/dqmc /tmp/dqmc && cp -r /tmp/dqmc/.claude/skills/dqmc-dev ~/.claude/skills/dqmc

// tip: Run this command in your terminal to install the skill


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

# Build
make               # -> build/dqmc
make clean         # remove build/

# Test
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

  1. Add to X-macro list in src/rc/sim_types.h:

    // Add to MEAS_EQLT_LIST (or MEAS_UNEQLT_LIST for unequal-time)
    #define MEAS_EQLT_LIST \
        /* ... */ \
        X(my_meas, num_ij)  // pick an appropriate size expression
    
  2. Implement measurement kernel in src/rc/meas.c

  3. 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

  • make succeeds without warnings
  • cd test && make && ./test_greens passes
  • Smoke run completes
  • If touching measurements: verify via dqmc-util summary