Basilisk C implementation of a planar chemically active drop and of a
bracketed search for its finite-time onset of self-propulsion in the Péclet
number. Read this file before changing code; README.md is the entry point
for building and running.
simulationCases/dropMove.c: the planar reference entry point. Reads akey=valueparameter file throughsrc-local/params.hand writesintermediate/snapshot-<t>,log.dat, oneSTATUSline and oneSUMMARYline. Generated case folderssimulationCases/c<CaseNo>/andsimulationCases/pescan-<tag>/are ignored by Git.simulationCases/dropMove-embed-pipe.canddropMove-embed-channel.c: confined axisymmetric and planar cases, sharingsrc-local/dropMove-embed.h. Use their matchingembed-*.paramsfiles. Inert embedded walls impose no slip and zero species flux; no wetting/contact model is provided.src-local/:activity.h(interfacial chemical source and species transport),parse_params.handparams.h(the single runtime-parameter pathway),two-phase-clsvof-VP.h(experimental viscoplastic variant, not included by the driver).postProcess/: snapshot readers (get*.c, compiled withqcc) and the plotting scriptscontour.pyandvectors.py.testCases/: software tests only (see evidence classes below).- Root:
runSimulation.sh,runParameterSweep.sh,PeScan.py,default.params,sweep.params. basilisk/and.project_config: the project-local pinned Basilisk installed by the CoMPhy ref-locked script. Never committed; the runners source.project_config.
- One parameter pathway. Runtime values enter only through the
.paramsfile passed asargv[1]; do not addkey=valuecommand-line parsing or a second parser. New parameters get a default in the relevant driver, a line indefault.paramsand a row in the driver's header table. - Cases run in their own directory.
runSimulation.shcopies the source and parameter file intosimulationCases/c<CaseNo>/, compiles with-I../../src-localand executes there.CaseNo >= 1000. - Sweeps go through
runParameterSweep.sh(SWEEP_*Cartesian product, deterministicCaseNo,--dry-runfirst). Onset scans go throughPeScan.py, which callsrunSimulation.shper sample. - Diagnostics use volume weights. Centroid, drop volume and kinetic energy
are reduced with
f*dv(); a cell-count weighted sum is a defect on an adaptive mesh. Displacement is measured from the initial centroid. - Classification is a convention, not a critical value.
MOVEDmeans the centroid displacement exceededthresholdbeforetmaxat the givenMAXlevel. Any quoted transition interval must carry those three values;PeScan.pyrecords them inresults.json. - Basilisk compatibility.
FILTEREDis defined with a value, reductions inforeachare space separated, and the removeddirtyattribute is not set. Before asserting Basilisk API behaviour, check the source; do not guess. - Literate C. Documentation lives in
/** ... */Markdown blocks and is rendered by.github/scripts/generate_docs.pyinto.github/docs/. Keep the file header and section headings when editing.
- Software tests (
testCases/):test_pescan.pychecks the search logic against synthetic classifiers (monotone threshold, all moving, all stationary, non-monotone window, numerical failure, run cap).centroid-check.cchecks the centroid diagnostic against the exact centroid of a circle on a deliberately asymmetric adaptive mesh. Both establish implementation contracts only. - No verification or validation case exists yet. A single-drop run that
reports
MOVEDdemonstrates that the code runs and that the instability develops at that resolution; it does not verify convergence to the continuum problem or validate against independent data. Do not describe scan output as either.
bash testCases/run-tests.sh # software tests (needs qcc for the C check)
bash testCases/run-embed-tests.sh # embedded geometry and species wall checks
bash runSimulation.sh default.params # one case
bash runParameterSweep.sh sweep.params --dry-run
python3 PeScan.py 1.0 0.5 --tmax 50 --max-level 9 --tag level9
bash .github/scripts/build.sh # regenerate the docs siteCommit the regenerated .github/docs/ together with the source change that
motivated it. Do not commit basilisk/, .project_config, CLAUDE.md,
case folders or compiled binaries.