Loading...
Loading...
Map computational materials tasks onto workflow engines such as atomate2, jobflow, AiiDA, pyiron, or a simple one-off script. Use when deciding how to structure a reproducible campaign, DAG, restart strategy, provenance record, storage layout, or migration path from ad hoc scripts to managed workflows.
npx skill4agent add heshamfs/materials-simulation-skills workflow-engine-mapper| Input | Description | Example |
|---|---|---|
| Task | Workflow purpose | |
| Code | Main simulation engine | |
| Runs | Approximate number of calculations | |
| Provenance | Whether audit trail matters | |
| Restart | Whether jobs may resume after failure | |
| HPC | Whether remote scheduler is required | |
--preferredscripts/workflow_engine_mapper.pyrecommended_enginedag_patternprovenance_requirementsrestart_strategystorage_layoutmigration_triggersnotespython3 skills/simulation-workflow/workflow-engine-mapper/scripts/workflow_engine_mapper.py \
--task "relax static dos for 200 oxides" \
--code vasp \
--runs 200 \
--needs-provenance \
--needs-restart \
--hpc \
--json--jsonworkflow_engine_mapper.pyinputsrunscodeneeds_provenanceneeds_restarthpcrecommended_engine--preferredruns<5hpcruns>=50coderuns>=10dag_patterndosbandphononstaticscreensweepcampaignmanybatchwith restart checkpoints--needs-restartprovenance_requirementsrestart_strategystore_code_versionstore_environmentcheckpoint_jobsruns>=20resume_by_job_id_or_namemigration_triggersstorage_layoutinputs/runs/<job-id>/outputs/metadata/workflow.jsonreports/02| Tempting shortcut | Why it's wrong / what to do |
|---|---|
| "It's only a few runs now, so a one-off script is fine forever." | The mapper emits a |
| "I need provenance, so the answer must be AiiDA." | AiiDA is gated on provenance AND (HPC or |
| "The engine ran and printed a recommendation, so the inputs were right." | The script validates bounds, not intent. A forgotten |
| "It's a screening campaign, so the DAG is just a map over structures." | If the task also names a property (dos/band/phonon/static), the correct pattern composes both: |
| "Restart isn't critical, so I can skip checkpointing." | |
"The recommended engine doesn't match what I'd have picked, so I'll just use | |
--needs-provenance--needs-restart--hpc--jsonstore_trueruns<= 0MAX_RUNS = 1,000,000main()math.isfinitetaskMAX_TASK_LENcodepreferredMAX_FIELD_LENpreferredautoone-offjobflowatomate2aiidapyirontaskcodetaskValueErrorallowed-tools: Read, Bash, Write, Grep, GlobBashscripts/workflow_engine_mapper.pyReadGrepGlobreferences/workflow_engines.mdWriteevalexecsubprocessjson.dumps--jsonrunstaskcodepreferredreferences/workflow_engines.mdscript_checks